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

  FORUM HardWare.fr
  Programmation
  PHP

  SELECT COUNT vs MYSQL_NUM_ROWS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SELECT COUNT vs MYSQL_NUM_ROWS

n°1335245
newneo2001
Posté le 30-03-2006 à 08:46:22  profilanswer
 

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/
mood
Publicité
Posté le 30-03-2006 à 08:46:22  profilanswer
 

n°1335257
jagstang
Pa Capona ಠ_ಠ
Posté le 30-03-2006 à 09:01:40  profilanswer
 

d'après toi, que fais la command mysql_num_rows ?

n°1335261
nero27
Posté le 30-03-2006 à 09:09:50  profilanswer
 

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 ;)

n°1335264
jagstang
Pa Capona ಠ_ಠ
Posté le 30-03-2006 à 09:19:25  profilanswer
 

nero27 a écrit :

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 ;)


je doute que ça se passe ainsi....

n°1335267
chaced
Posté le 30-03-2006 à 09:22:35  profilanswer
 

mysql_num_rows fait un simple count(mysql_fetch_row($res)) :D
 
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....


---------------
CPU-Z | Timespy | Mes bd
n°1335270
newneo2001
Posté le 30-03-2006 à 09:25:30  profilanswer
 

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.


Message édité par newneo2001 le 30-03-2006 à 09:25:54

---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
n°1335279
nero27
Posté le 30-03-2006 à 09:43:42  profilanswer
 

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 ;)

n°1335309
chaced
Posté le 30-03-2006 à 10:15:34  profilanswer
 

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 :)

Message cité 1 fois
Message édité par chaced le 30-03-2006 à 10:20:50

---------------
CPU-Z | Timespy | Mes bd
n°1335318
nero27
Posté le 30-03-2006 à 10:20:34  profilanswer
 

Non, max(id) est loin d'être performant :/

n°1335319
chaced
Posté le 30-03-2006 à 10:21:06  profilanswer
 

ça plutot alors :D select id from toto order by id desc limit 0,1
 
Perso, j'utilise plutot count(*) as cpt :lol:


Message édité par chaced le 30-03-2006 à 10:21:55

---------------
CPU-Z | Timespy | Mes bd
mood
Publicité
Posté le 30-03-2006 à 10:21:06  profilanswer
 

n°1335327
smaragdus
whores, drugs & J.S. Bach
Posté le 30-03-2006 à 10:30:22  profilanswer
 

newneo2001 a écrit :

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


 
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.
 

n°1335352
nero27
Posté le 30-03-2006 à 10:55:15  profilanswer
 

Ca m'intéresse : tu peux développer un peu stp (avec un exemple si possible) ?


Message édité par nero27 le 30-03-2006 à 10:55:28
n°1335363
smaragdus
whores, drugs & J.S. Bach
Posté le 30-03-2006 à 11:02:21  profilanswer
 
n°1335389
Djebel1
Nul professionnel
Posté le 30-03-2006 à 11:17:44  profilanswer
 

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


 
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)


Message édité par Djebel1 le 30-03-2006 à 11:21:22
n°1335465
chaced
Posté le 30-03-2006 à 12:31:29  profilanswer
 
n°1335470
smaragdus
whores, drugs & J.S. Bach
Posté le 30-03-2006 à 12:42:34  profilanswer
 


 
En français, y a 10 fois moins de commentaires d'utilisateurs  [:zytrafumay]  

n°1335481
chaced
Posté le 30-03-2006 à 13:06:16  profilanswer
 

C'est normal si tout le monde va sur la version anglaise.... :D


---------------
CPU-Z | Timespy | Mes bd
n°1335904
newneo2001
Posté le 30-03-2006 à 22:05:02  profilanswer
 

super intéressant ça  
 
SQL_CALC_FOUND_ROWS
 
je connaissais pas. Merci pour l'info


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/

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

  SELECT COUNT vs MYSQL_NUM_ROWS

 

Sujets relatifs
Comment faire un Select du resultat d'une Procedure Stockée ?Grosse table en MySQL
UDP winsock2 : Select problemJointure MySQL
Un SELECT à priori difficileMysql C# "aucune ligne à la position -1" [trouvé]
[PHP/MySQL] Ajout de champ dynamique et checkbox [ RESOLU ] pb avec COUNT
classe de connexion SGBD mysql en dll (.so) sous linuxServeur web apache php mysql phpmyadmin sous linux, tutoriel
Plus de sujets relatifs à : SELECT COUNT vs MYSQL_NUM_ROWS


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