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

  FORUM HardWare.fr
  Programmation
  PHP

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°484326
Jul
Posté le 12-08-2003 à 01:49:01  profilanswer
 

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
mood
Publicité
Posté le 12-08-2003 à 01:49:01  profilanswer
 

n°484329
burgergold
5$? va chez l'diable!
Posté le 12-08-2003 à 02:09:54  profilanswer
 

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
n°484330
Jul
Posté le 12-08-2003 à 02:12:12  profilanswer
 

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

n°484331
burgergold
5$? va chez l'diable!
Posté le 12-08-2003 à 02:13:22  profilanswer
 

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
n°484335
Jul
Posté le 12-08-2003 à 02:21:07  profilanswer
 

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

n°484338
burgergold
5$? va chez l'diable!
Posté le 12-08-2003 à 02:23:12  profilanswer
 

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
n°484347
Jul
Posté le 12-08-2003 à 02:42:27  profilanswer
 

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

n°484859
rufo
Pas me confondre avec Lycos!
Posté le 12-08-2003 à 14:11:08  profilanswer
 

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

n°485023
belgique
Posté le 12-08-2003 à 15:40:58  profilanswer
 

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

n°485054
Sh@rdar
Ex-PhPéteur
Posté le 12-08-2003 à 16:01:34  profilanswer
 

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
mood
Publicité
Posté le 12-08-2003 à 16:01:34  profilanswer
 

n°485071
rufo
Pas me confondre avec Lycos!
Posté le 12-08-2003 à 16:08:09  profilanswer
 

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

n°485328
Jul
Posté le 12-08-2003 à 19:05:32  profilanswer
 

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

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

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

 

Sujets relatifs
Acces Vs MySql ! Comment y accéder en c++ ?[linux] empêcher un programme de se lancer plusieurs fois : résolu
[PHP] création automatique de pagesWarning: mysql_num_rows(): supplied argument ...
[delphi] longueur du code ... comment vous faites?Système de couleurs personalisées avec JS compatible Mozilla [résolu]
[PHP/SGDB] Lancer un script à un interval régulièrementQuels parametres mysql entrer sous easyphp ?
code CSS foireux ou bug de ie? (si c'est le cas j'ai besoin d'un fix)[Résolu] Impossible d'exécuter des javascript
Plus de sujets relatifs à : [PHP, MYSQL] [résolu]Comment optimiser ce code? (nombreux SELECT FROM)


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