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