Mysql_num_rows() ou COUNT() ??

Signaler
Messages postés
6
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
25 juin 2017
-
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
-
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
A voir également:

12 réponses

Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
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 !
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
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.
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
54
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
19 août 2009

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';
}
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
dans quel sens ?
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Ce qui est tout à fait normal.

Sauf si pid est indexé... normalement ca devrait être kifkif :)