Mysql_num_rows() ou COUNT() ??

aymeric45 Messages postés 6 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 25 juin 2017 - 21 août 2006 à 22:39
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 23 août 2006 à 16:43
Chers amis développeurs, bonjour.

J'aimerais savoir, quelle est la solution la plus optimisée pour compter le nombre d'enregistrements sélectionnés par un SELECT.

<?php

//Solution 1
$sql=mysql_query('SELECT id FROM matable');
$nb=mysql_num_rows($sql);

//Solution 2
$sql=mysql_query('SELECT COUNT(*) FROM matable');
$nb=mysql_result($sql,0);
?>

Quelle solution est la plus rapide, pour 1 enregistrement ? pour x enregistrement ?

Merci de me donner votre avis

Aymeric

12 réponses

pcgpegase Messages postés 96 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 24 avril 2007 1
21 août 2006 à 23:14
Bonsoir !

Personnellement, je pencherais plus pour un SELECT COUNT(id) pour récupérer un résultat... mais bon c'est plus par habitude qu'autre chose ^^
Je ne saurais dire laquelle des 2 solutions est la plus rapide !

Bonne soirée !
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
21 août 2006 à 23:21
Je donnerais aussi la solution 2 qui est plus propre (ça j'en suis sur) et je pense - gourmande en memoire (a verifier..)
.
-------------------------------------

Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
22 août 2006 à 09:07
moi je te dirai que ca depend de ce que tu fais.
si tu veu juste connaitre le nombre d'enregistrements, alors je te conseille sans hesiter le count.
par contre, si tu veu en plus traiter les enregistrements, alors peut etre que la 1ere solution est mieux, a voir.
mais ca ne reste qu'un avis personnel.
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 août 2006 à 09:42
Salut!
Le SELECT count( id ) est le plus rapide! ( et pas SELECT count( * ) )

En spécifiant l'id, la recherche sera plus rapide!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
22 août 2006 à 10:07
Cookie...tu as une source pour ça ???
car il me semble  avoir lu y' a qques mois, que le count(champ) et count(*) etait maintenant identique niveau perf.
vais essayer de retrouver l'info...
-------------------------------------

Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 août 2006 à 10:14
Salut!
Si je me trompe pas: les tables MySQL sont réparties sur 3 fichiers, dont un qui ne contient que les indexs. Si tu spécifies count(index) ( donc le id ), ca ne parcourt que le fichier des indexs et c'est plus rapide... Enfin, il me semble que c'est ce que j'avais vu!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
22 août 2006 à 10:16
ok... mais count(*) se base aussi sur le fichier index et ne parcourt pas la table, c'est pour ça d'ailleurs qu'un count(*) et  + rapide qu'un select *

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
Rati_12 Messages postés 54 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 19 août 2009
23 août 2006 à 00:39
faut utiliser selon la situation, si tu cherche juste a savoir le nombre, count suffit, mais si tu veut l'utiliser, alors mysql_num_rows(.

exemple

if (!((mysql_num_rows($req))>0)){
// on affiche les reponses
}
else
{
echo'aucune reponses';
}
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 août 2006 à 08:40
Yop!
Alors, j'ai fait qq tests sur une table de 11'000 enregistrements (la table de posts d'un forum ipb):

Entre:
SELECT count(*) et count(id) >> pas de différence

Mais entre un:
SELECT pid puis mysql_num_rows
et SELECT count(*) puis mysql_fetch_row, il y a un facteur 200 au niveau du temps!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2006 à 13:55
dans quel sens ?
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 août 2006 à 15:01
le SELECT pid est 200 fois plus lent que SELECT count

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 août 2006 à 16:43
Ce qui est tout à fait normal.

Sauf si pid est indexé... normalement ca devrait être kifkif :)
0
Rejoignez-nous