1ère question :
Utilisation du compte COUNT()
, en interne le serveur (MySQL) traitera la requête différemment.
Lors de l'exécution de COUNT()
, le serveur (MySQL) n'allouera de la mémoire que pour stocker le résultat du comptage.
Lors de l'utilisation de $row=$SQL->rowCount();
le serveur (Apache/PHP) traitera l'ensemble des résultats, allouera de la mémoire pour tous ces résultats et mettra le serveur en mode de récupération, ce qui implique de nombreux détails différents, tels que le verrouillage.
Notez que PDOStatement::rowCount()
renvoie le nombre de lignes affectées par la dernière instruction, et non le nombre de lignes renvoyées. Si la dernière instruction SQL exécutée par le PDOStatement
associé était un SELECT
instruction, certaines bases de données peuvent renvoyer le nombre de lignes renvoyées par cette instruction. Cependant, ce comportement n'est pas garanti pour toutes les bases de données et ne doit pas être invoqué pour les applications portables.
D'après mon analyse, si vous utilisez COUNT()
, le processus serait divisé à la fois en MySQL et en PHP alors que si vous utilisez $row=$SQL->rowCount();
, le traitement serait plus pour PHP.
Donc COUNT()
dans MySQL est plus rapide.
2ème question :
COUNT(*)
vaut mieux que COUNT(id)
.
Explication :
Le count(*)
La fonction dans mysql est optimisée pour trouver le nombre de valeurs. L'utilisation d'un caractère générique signifie qu'il ne récupère pas toutes les lignes. Il ne trouve que le décompte. Utilisez donc count(*)
dans la mesure du possible.
Source :