par
Ryle » 22 mai 2006, 15:58
Le problème est si j'ai bien compris, que tu fais le count pour chaque sujet affiché, et donc s'il y a 30 sujets, cela implique 30 count.. tu pourrais pour optimiser cela faire un count sans tenir compte du sujet (et ainsi ramener en une seule requête la valeur pour tous les enregistrements) que tu mettrais dans un tableau qui sera plus rapide à interroger. Tu aurais ainsi un tableau du genre
$tab = array ( idSujet => nbMessages), que tu pourrais intérroger en appellant $tab[$idSujet] pour obtenir le nombre de message associé...
Option 2, faire une jointure dans ta requête pour rammener à la fois sujet et nombre de réponses associés. Quelque chose du genre
$sql = " SELECT ...
FROM forums_titres ft
OUTER JOIN forums_newmessage fm ON ft.id_titre = fm.id_titre
WHERE fm.id_profil = " . $id_profil;
Sinon histoire d'améliorer légèrement les performances, tu peux :
- virer les apostrophes autour des nombres dans tes chaines SQL : il les considère comme des chaines de caractère et est obligé de les convertir en nombre pour les comparer en base.. ca lui fera toujours ça de moins à faire
- lister explicitement les champs que tu récupères dans ton select (au lieu du "select *", tu ne rammenes ainsi que ceux que tu utilises, et pour certains code ou l'ordre des champs est important, c'est une bonne habitude à prendre que de les lister.
- ajouter des index, si ce n'est pas déjà fait, sur les colonnes utilisées dans ton WHERE, une table indexée est lu beaucoup plus rapidement puisqu'il n'a pas à parcourir toute la table à chaque fois.
Le problème est si j'ai bien compris, que tu fais le count pour chaque sujet affiché, et donc s'il y a 30 sujets, cela implique 30 count.. tu pourrais pour optimiser cela faire un count sans tenir compte du sujet (et ainsi ramener en une seule requête la valeur pour tous les enregistrements) que tu mettrais dans un tableau qui sera plus rapide à interroger. Tu aurais ainsi un tableau du genre
$tab = array ( idSujet => nbMessages), que tu pourrais intérroger en appellant $tab[$idSujet] pour obtenir le nombre de message associé...
Option 2, faire une jointure dans ta requête pour rammener à la fois sujet et nombre de réponses associés. Quelque chose du genre
[php]$sql = " SELECT ...
FROM forums_titres ft
OUTER JOIN forums_newmessage fm ON ft.id_titre = fm.id_titre
WHERE fm.id_profil = " . $id_profil;[/php]
Sinon histoire d'améliorer légèrement les performances, tu peux :
- virer les apostrophes autour des nombres dans tes chaines SQL : il les considère comme des chaines de caractère et est obligé de les convertir en nombre pour les comparer en base.. ca lui fera toujours ça de moins à faire
- lister explicitement les champs que tu récupères dans ton select (au lieu du "select *", tu ne rammenes ainsi que ceux que tu utilises, et pour certains code ou l'ordre des champs est important, c'est une bonne habitude à prendre que de les lister.
- ajouter des index, si ce n'est pas déjà fait, sur les colonnes utilisées dans ton WHERE, une table indexée est lu beaucoup plus rapidement puisqu'il n'a pas à parcourir toute la table à chaque fois.