Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3090 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation récupération d'un gros tableau MySQL.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation récupération d'un gros tableau MySQL.

n°1361069
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 00:18:24  profilanswer
 

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 :

Code :
  1. $lecture=mysql_query('SELECT * FROM matable');
  2. for ($i=0;$i<mysql_num_rows($lecture);$i++) {
  3. $recup=mysql_fetch_rows($lecture);
  4. $id[$i]=$recup['0'];
  5. $param1[$id]=$recup['1'];
  6. $param2[$id]=$recup['2'];
  7. ... (une quinzaine);
  8. }


 
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
mood
Publicité
Posté le 07-05-2006 à 00:18:24  profilanswer
 

n°1361071
Capt1TaRac​e
Posté le 07-05-2006 à 00:22:20  profilanswer
 

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..

n°1361072
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 00:23:39  profilanswer
 

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. :D
Y'a p'têtre un gars sur HFR qui va me sortir l'optimisation qui roxxxe des loutres que personne connait. :D

n°1361073
sielfried
Posté le 07-05-2006 à 00:24:56  profilanswer
 

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.
 


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1361075
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 00:28:25  profilanswer
 

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 ?

n°1361079
sielfried
Posté le 07-05-2006 à 00:34:49  profilanswer
 

for ($i = 0; $recup = mysql_fetch_row($lecture); $i++)
 
Quand mysql_fetch_row renvoie false, la boucle est finie.


Message édité par sielfried le 07-05-2006 à 00:36:26

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1361082
sielfried
Posté le 07-05-2006 à 00:39:42  profilanswer
 

D'ailleurs c'est pas très clair, l'indice de tes tableau "$param" c'est le tableau $id ? [:pingouino]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1361083
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 00:40:30  profilanswer
 

Ha oky, j'avais pas pensé à ça. :jap:

n°1361084
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 00:45:08  profilanswer
 

sielfried a écrit :

D'ailleurs c'est pas très clair, l'indice de tes tableau "$param" c'est le tableau $id ? [:pingouino]


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 ?

n°1361089
sielfried
Posté le 07-05-2006 à 01:01:36  profilanswer
 

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 :
  1. while ($row = mysql_fetch_row($res)) {
  2.   $id = $row[0];
  3.   for ($numcol = 1; $i < $nbcol; $numcol++) {
  4.      $param[$id][$numcol] = $row[$numcol];
  5.   }
  6. }


 
(où numcol est le nombre de colonnes (champs) dans ta table)

Message cité 1 fois
Message édité par sielfried le 07-05-2006 à 01:02:38

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 07-05-2006 à 01:01:36  profilanswer
 

n°1361092
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 07-05-2006 à 01:05:54  profilanswer
 

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.
 
Je verrais plutôt qqchose comme ça :

Code :
  1. while ($row = mysql_fetch_row($res)) {
  2.   $id = $row[0];
  3.   for ($numcol = 1; $i < $nbcol; $numcol++) {
  4.      $param[$id][$numcol] = $row[$numcol];
  5.   }
  6. }


 
(où numcol est le nombre de colonnes (champs) dans ta table)


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.  :D


Message édité par The-Shadow le 07-05-2006 à 01:06:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation récupération d'un gros tableau MySQL.

 

Sujets relatifs
MySQL : Un Order By Tres ambigu !![SOAP] Retourner un tableau
Insertion de valeur dans un tableau associatif ?[php] récupération des noms de variables
Connection MySQL permanente ou pas ?mysql et nombre d'enregistrements
Afficher le contenu d'un tableau dans une liste deroulanteExtraire le jour d'une date MySQL
[RESOLU][MYSQL] Importer une base de données 
Plus de sujets relatifs à : Optimisation récupération d'un gros tableau MySQL.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR