[PHP, MYSQL] [résolu]Comment optimiser ce code? (nombreux SELECT FROM)

Comment optimiser ce code? (nombreux SELECT FROM) [PHP, MYSQL] [résolu] - PHP - Programmation

Marsh Posté le 12-08-2003 à 01:49:01    

Bonsoir,
 
J'ai un bout de code qui me bouffe pas mal (bcp trop) de cpu :

Code :
  1. while ($fid = mysql_fetch_array($result))
  2. {
  3.   $fid = $fid[0];
  4.   $result2 = mysql_query("SELECT threadid FROM readthread WHERE userid=$userid AND forumid=$fid LIMIT 1" );
  5.   $test = mysql_fetch_array($result2);
  6.   if ($test)
  7. $unread_tab[$fid] = 1;
  8.   else
  9. $unread_tab[$fid] = 0;
  10. }


La boucle while tourne 28 fois (j'ai 28 fid), et ça me prend 5s sur un p3 850.
Est ce qu'il y a moyen d'optimiser ce code? Je trouve étrange que cela me bouffe autant de ressources...
 
Merci d'avance.


Message édité par Jul le 12-08-2003 à 02:22:48
Reply

Marsh Posté le 12-08-2003 à 01:49:01   

Reply

Marsh Posté le 12-08-2003 à 02:09:54    

on commence par améliorer le code php, jlaisse le sql a kelkun d'autre :D
 

Code :
  1. while ($fid = mysql_fetch_array($result))
  2.   {
  3.       $fid = $fid[0];
  4.       $result2 = mysql_query("SELECT threadid FROM readthread WHERE userid=$userid AND forumid=$fid LIMIT 1" );
  5.       if (mysql_num_rows($result2))
  6.        $unread_tab[$fid] = 1;
  7.       else
  8.        $unread_tab[$fid] = 0;
  9.   }


Message édité par burgergold le 12-08-2003 à 02:11:41

---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 12-08-2003 à 02:12:12    

ah bah voilà, c'est ça qui coince sans doute :pt1cable:

Reply

Marsh Posté le 12-08-2003 à 02:13:22    

Jul a écrit :

ah bah voilà, c'est ça qui coince sans doute :pt1cable:  


 
bah la modif que jai fait changement pas grand chose niveau performance, c un sauvetage minime de mémoire
 
selon moi c ta bd mysql qui doit pas etre indexé ou que la requete passe pas bien


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 12-08-2003 à 02:21:07    

Ah oui en effet, pas d'index défini :whistle:
Ca va plus vite là tout à coup :D
 
Merci burgergold :jap:

Reply

Marsh Posté le 12-08-2003 à 02:23:12    

Jul a écrit :

Ah oui en effet, pas d'index défini :whistle:
Ca va plus vite là tout à coup :D
 
Merci burgergold :jap:  


 
surtout un forum, sans index ca va etre horrible si tu continus ainsi :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 12-08-2003 à 02:42:27    

Non mais l'index manquait seulement sur une table que je venais d'ajouter, donc ça va :)

Reply

Marsh Posté le 12-08-2003 à 14:11:08    

j'ai pas saisi exactement ce que faisait vraiment ton code, mais si via une requête sql (ou autre) t'as moyen de trouver le nb d'itérations à effectuer, je te conseille de faire un for à la place d'un while...

Reply

Marsh Posté le 12-08-2003 à 15:40:58    

Vu qu'on a pas tout le code, difficile de voir mais pourquoi ne pas faire une jointure directement?

Reply

Marsh Posté le 12-08-2003 à 16:01:34    

faire des requêtes dans une boucle caï mal !!! :non:  
 
tu peux pas utiliser un IN () avec les fid ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 12-08-2003 à 16:01:34   

Reply

Marsh Posté le 12-08-2003 à 16:08:09    

Sh@rdar a écrit :

faire des requêtes dans une boucle caï mal !!! :non:  
 
tu peux pas utiliser un IN () avec les fid ?


 
C'est à ça que je pensais dans mon post précédent...

Reply

Marsh Posté le 12-08-2003 à 19:05:32    

euh ben je sais pas concernant la jointure, suis pas expert. Je fais d'après ce que je connais [:spamafote]
 
Vais regarder de plus près tout ça.


Message édité par Jul le 12-08-2003 à 19:08:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed