Optimisation récupération d'un gros tableau MySQL. - PHP - Programmation
Marsh Posté le 07-05-2006 à 00:22:20
le seul moyen que je vois serait de fragmenter le travail avec des LIMIT
maintenant je suis pas THE codeur php, mais en principe si tu as besoin de tout, y'a pas 36 000 optimisation à faire malheureusement..
Marsh Posté le 07-05-2006 à 00:23:39
Capt1TaRace a écrit : y'a pas 36 000 optimisation à faire malheureusement.. |
Ouai, je m'en doutais, mais je me suis dit que j'allais posé la question au cas où, on sait jamais.
Y'a p'têtre un gars sur HFR qui va me sortir l'optimisation qui roxxxe des loutres que personne connait.
Marsh Posté le 07-05-2006 à 00:24:56
Déjà ta boucle est pas bien maline parce que mysql_num_rows va être exécutée à chaque tour de boucle. D'ailleurs tu n'en as pas besoin, les mysql_fetch_* renvoyant toujours false quand tu es sur le dernier tuple.
Sinon si tu fais la même chose sur chaque table c'est probablement factorisable en quelque chose de plus condensé, mais là c'est + une question de longueur de code que de vitesse d'exécution. Normalement tu peux pas faire bien mieux que mysql_fetch_row pour parser une table rapidement.
Marsh Posté le 07-05-2006 à 00:28:25
sielfried a écrit : Déjà ta boucle est pas bien maline parce que mysql_num_rows va être exécutée à chaque tour de boucle. D'ailleurs tu n'en as pas besoin, les mysql_fetch_* renvoyant toujours false quand tu es sur le dernier tuple. |
Explique ça, je pige pas.
Si je mets le fetch_row en dehors de la bouche et que dans ma boucle, je fais $id[$i]=$recup['0'], $id[$i] aura toujours la valeur de la première ligne de ma base non ?
Marsh Posté le 07-05-2006 à 00:34:49
for ($i = 0; $recup = mysql_fetch_row($lecture); $i++)
Quand mysql_fetch_row renvoie false, la boucle est finie.
Marsh Posté le 07-05-2006 à 00:39:42
D'ailleurs c'est pas très clair, l'indice de tes tableau "$param" c'est le tableau $id ?
Marsh Posté le 07-05-2006 à 00:45:08
sielfried a écrit : D'ailleurs c'est pas très clair, l'indice de tes tableau "$param" c'est le tableau $id ? |
id est un autoincrémenté et j'identifie toutes mes lignes par leur id respectif, donc :
si id=366, $param1[366]=..., $param2[366]=..., etc.
je pourrais aussi faire $id[$i]=..., $param1[$i]=..., mais ça me permet de récupérer illico le $param1 de l'id 366.
Comment ferais-tu toi pour récupérer, par exemple, le param13 dont la ligne dans la bdd est 366 autrement ?
Marsh Posté le 07-05-2006 à 01:01:36
Disons que là pour moi tous tes $param ont exactement le même indice, en l'occurence le tableau $id, donc j'ai un peu de mal à voir comment ton truc marche, mais en même temps il est 1h du matin et j'ai probablement loupé un truc évident.
Je verrais plutôt qqchose comme ça :
Code :
|
(où numcol est le nombre de colonnes (champs) dans ta table)
Marsh Posté le 07-05-2006 à 01:05:54
sielfried a écrit : Disons que là pour moi tous tes $param ont exactement le même indice, en l'occurence le tableau $id, donc j'ai un peu de mal à voir comment ton truc marche, mais en même temps il est 1h du matin et j'ai probablement loupé un truc évident.
|
Bah, en gros, c'est ce que je fais, sauf que je fais une boucle for au lieu d'un while, mais j'avais tenté le while, j'y gagnais rien.
Par contre, $param, c'est des noms que j'ai donné pour l'exemple, en fait les params n'ont pas du tout le même nom. Ils ne s'appellent pas param1 param2.
Marsh Posté le 07-05-2006 à 00:18:24
J'ai un petit soucis, je demande, on sait jamais.
Voilà, je bosse sur un projet où chaque page doit récupérer toutes les infos d'une "grosse" table MySQL.
Donc, classiquement, je fais ceci :
Voilà, c'est tout balot. Je mets un '*' dans la requête car je dois récupérer toutes les infos de toutes façons.
Seulement voilà, ça prend presque 0,4ms juste pour cette boucle. C'est une relative grosse table qui risque de grossir encore et j'ai besoin de tout récupérer pour des besoins de calculs à la suite.
Si quelqu'un connait une façon d'optimiser ça, ça pourrait être sympa de me renseigner.
Merci d'avance.
Message édité par The-Shadow le 07-05-2006 à 00:28:34