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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation d'un count

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation d'un count

n°973009
scull
MySCULL cay bon mangez en!
Posté le 06-02-2005 à 00:03:13  profilanswer
 

Bonsoir, voilà un script que je viens de faire pour recompter les message de mon forum, or ce script est vraiment trés trés lent...
 
Je me demandais si il était pas possible d'optimiser ces foutus count, car il est quand mème bizarre que compter 30 suejt et 400 réponse me prennent 25 secondes....
 
Si vous avez une idée...
 

Code :
  1. $requete_sujet=mysql_query('SELECT id, reply  FROM sujet WHERE cat = "'.$cat.'" and sid="'.$sid.'" AND valider>="1" ') or die(mysql_error());
  2. $total_sujet = mysql_num_rows($requete_sujet);
  3.   echo'-<br>'.$total_sujet.' est le nombre de sujet dans la cat '.$cat.'';
  4. $i = "0";
  5. while($row = mysql_fetch_array($requete_sujet)) {
  6.             $tid =  $row['id'];
  7.            
  8. $requete_rep =  mysql_query('SELECT id FROM reponse WHERE sujet_id="'.$tid.'" AND valider="1" order by date_verif ASC') or die(mysql_error());
  9. $totalrep    =  mysql_num_rows($requete_rep);
  10.      if($row['reply']<$totalrep) {
  11.     MYSQL_QUERY("UPDATE sujet SET reply = $tid WHERE id='$sujeid'" );
  12.     }
  13. $i1 = $totalrep + $i1;
  14. }
  15. echo'- '.$i1.'- ';
  16. MYSQL_QUERY("UPDATE catforum SET nbre_sujet = $total WHERE id='$cat'" );
  17. MYSQL_QUERY("UPDATE catforum SET nbre_rep = $i1 WHERE id='$cat'" );
  18. echo'<br><br><br>ACTION :: OK<br><br><br>';


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
mood
Publicité
Posté le 06-02-2005 à 00:03:13  profilanswer
 

n°973010
Yonel
Monde de merde !
Posté le 06-02-2005 à 00:12:08  profilanswer
 

sert toi de l'instruction COUNT de SQL car les SGBD sont fait de telle sorte que cette fonction est optimisée. Si tu comptes au niveau de PHP tu perds du temps étant donné qu'il fait sa requête sans utiliser l'optimisation du COUNT.
 
Donc à la place de ta première requête tu mettrais par exemple  

Code :
  1. SELECT COUNT(*) As nbLignes FROM sujet WHERE cat = "'.$cat.'" and sid="'.$sid.'" AND valider>="1"


 
pis pareil pour compter le nombre de réponses

n°973014
Yonel
Monde de merde !
Posté le 06-02-2005 à 00:24:32  profilanswer
 

ah et puis un autre truc, c'est inutile de stocker des champs calculés comme le nombre de messages d'un sujet. Tu perds en cohérence et en intégrité des données. Il vaut mieux faire un COUNT, ça te permet :
- de pas avoir à utiliser un script pour mettre à jour le nombre de messages
- d'être sûr du résultat, le COUNT est infaillible :D
- si par hasard une autre page modifie le nombre de messages ou de sujet pour une raison quelconque l'information de la base de données devient erronée et cela t'obliges à passer par un script pour la corriger :/
 
Donc dans ta table "catforum", pas besoin des champs nbre_sujet, ni nbre_rep. D'une manière générale, on ne stocke pas de champs calculés sauf si le calcul est trop compliqué à faire

n°973040
scull
MySCULL cay bon mangez en!
Posté le 06-02-2005 à 01:38:55  profilanswer
 

ha bon ? il vaux mieux pas que je stocke le nombre de message ? Refaire un count à chaque fois sa risque d'ètre super lourd je pense.... Surout si à chauqe fois je dois recompter les sujet et leur réponses....


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°973060
doudoule l​a banane
Posté le 06-02-2005 à 02:02:12  profilanswer
 

et index tes champs sur les quel tu fais ta recherce...  :o

n°973277
Yonel
Monde de merde !
Posté le 06-02-2005 à 15:04:58  profilanswer
 

scull a écrit :

ha bon ? il vaux mieux pas que je stocke le nombre de message ? Refaire un count à chaque fois sa risque d'ètre super lourd je pense.... Surout si à chauqe fois je dois recompter les sujet et leur réponses....


 
nan justement c'est pas lourd à condition d'utiliser la fonction COUNT de SQL.
 
Pour avoir le nombre de sujets et de réponses par catégorie, il suffit de faire un truc du genre :

Code :
  1. SELECT COUNT(DISTINCT S.id) As nbSujets, COUNT(*) As nbReponses, cat.id
  2. FROM catforum cat, Sujet S, Reponse R
  3. WHERE cat.id=S.idcat
  4. AND R.sujet_id=S.id
  5. GROUP BY cat.id

n°973650
petitpata
Posté le 06-02-2005 à 23:12:26  profilanswer
 

doudoule la banane a écrit :

et index tes champs sur les quel tu fais ta recherce...  :o


+1

n°975724
kalex
Posté le 08-02-2005 à 18:34:14  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation d'un count

 

Sujets relatifs
optimisation conception base de donneesoptimisation de la recuperationd'image Rgb par socket
[Java] optimisation boucles for[VBA Excel] Optimisation Import d'un énorme fichier txt
Débutant ... count sur une colonneSQL(server) optimisation d'une requête
Optimisation (Quote Vs Guillement)Défi: optimisation d'une fonction de convertion (Bin => Dec)
Pb d'optimisation php/mysql[PHP] - [MySQL] - Optimisation de SELECT COUNT(*)
Plus de sujets relatifs à : Optimisation d'un count


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