SELECT COUNT vs MYSQL_NUM_ROWS - PHP - Programmation
Marsh Posté le 30-03-2006 à 09:09:50
un count me parait bien plus intéressant :
la requête va juste stocker en mémoire un entier alors que si tu fais une requête normale pour ensuite faire un mysql_num_rows, celle-ci va stocker inutilement tous les résultats en mémoire pour ensuite les compter en PHP avec mysq_num_rows
Marsh Posté le 30-03-2006 à 09:19:25
nero27 a écrit : un count me parait bien plus intéressant : |
je doute que ça se passe ainsi....
Marsh Posté le 30-03-2006 à 09:22:35
mysql_num_rows fait un simple count(mysql_fetch_row($res))
Donc oui, le count mysql est plus rapide, mais leprobleme, on ne peut récuperer qu'un compteur alors qu'avec la fonction php on traite directement le retour des lignes.
Bon d'un coté on peut tres bien faire, select count(*) as compteur, nom, prenom....
Marsh Posté le 30-03-2006 à 09:25:30
perso j'utilisais select count lorsque j'avais que ca à retirer, et si je récupère d'autres info j'utilisais le num_rows, mais c'est vrai que le select count(*) as compteur est pas mal non plus.
Marsh Posté le 30-03-2006 à 09:43:42
Evidemment, si on a aussi besoin des champs un mysql_num_rows($result) est plus approprié, mais vu comment la question est formulée, je parlais du cas où on n'a besoin que du compteur
Marsh Posté le 30-03-2006 à 10:15:34
nero27 a écrit : Evidemment, si on a aussi besoin des champs un mysql_num_rows($result) est plus approprié, mais vu comment la question est formulée, je parlais du cas où on n'a besoin que du compteur |
Logique, en fait, select id from toto renvoi toute les lignes genre si il y a 1millions d'enregistrement, il va y avoir un retour d'un million d'enregistrement...
Alors que on peut faire ça si l'ont veut : select max(id) from toto (si autoincrement)qui renvera l'id meme si il y a une perte en cas de suppression de champ, donc un compteur approximatif, ça a le mérite d'etre ultra performant
donc plusieurs solution possible
Marsh Posté le 30-03-2006 à 10:30:22
newneo2001 a écrit : Voila une petite question d'optimisation. |
Le select count sera bien plus economique en terme de memoire et de charge sgbd.
Par contre, en cas de pagination des résultats avec utilisation du LIMIT (comme ça arrive presque tout le temps), tu as l'option du SQL_CALC_FOUND_ROWS qui te permet de ramener le nombre total de lignes independamment des bornes du LIMIT, donc ça t'evite de faire un SELECT COUNT sans LIMIT juste pour connaitre ce total.
Marsh Posté le 30-03-2006 à 10:55:15
Ca m'intéresse : tu peux développer un peu stp (avec un exemple si possible) ?
Marsh Posté le 30-03-2006 à 11:02:21
ReplyMarsh Posté le 30-03-2006 à 11:17:44
chaced a écrit : Logique, en fait, select id from toto renvoi toute les lignes genre si il y a 1millions d'enregistrement, il va y avoir un retour d'un million d'enregistrement... |
euh grave pas optimisé, les tables MyISAM stockent directement le nombre d'enregistrements de la table, meme pas besoin de la parcourir (a considerer que tu veux tous les enregistrements)
Marsh Posté le 30-03-2006 à 12:31:29
Tu connais Moliere ?
http://dev.mysql.com/doc/refman/5. [...] tions.html
Marsh Posté le 30-03-2006 à 12:42:34
En français, y a 10 fois moins de commentaires d'utilisateurs
Marsh Posté le 30-03-2006 à 22:05:02
super intéressant ça
SQL_CALC_FOUND_ROWS
je connaissais pas. Merci pour l'info
Marsh Posté le 30-03-2006 à 08:46:22
Voila une petite question d'optimisation.
A votre avis que vaut il mieux utiliser et pourquoi ?
C'est pour récupérer différents avis
++
---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/