Il n'y a pas de différence.
Raison :
Livres en ligne dit " COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
"
"1" est une expression non nulle : c'est donc la même chose que COUNT(*)
. L'optimiseur le reconnaît pour ce qu'il est : trivial.
La même chose que EXISTS (SELECT * ...
o EXISTS (SELECT 1 ...
Ejemplo:
SELECT COUNT(1) FROM dbo.tab800krows
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID
SELECT COUNT(*) FROM dbo.tab800krows
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID
Même IO, même plan, les travaux
Edit, août 2011
Question similaire sur DBA.SE .
Edit, déc. 2011
COUNT(*)
est mentionné spécifiquement dans ANSI-92 (cherchez " Scalar expressions 125
")
Cas :
a) Si COUNT(*) est spécifié, alors le résultat est la cardinalité de T.
En d'autres termes, la norme ANSI reconnaît qu'il est évident de saigner ce que vous voulez dire. COUNT(1)
a été optimisé par les vendeurs de SGBD. porque de cette superstition. Sinon, il serait évalué selon l'ANSI
b) Sinon, que TX soit la table à une seule colonne qui est la résultat de l'application de l'expression <valeur> à chaque ligne de T et en éliminant les valeurs nulles. Si une ou plusieurs valeurs nulles sont éliminées, alors une condition d'achèvement est levée : warning-
8 votes
Je ne connais pas SQL Server mais dans MySQL il n'y a pas de différence. COUNT(colonne), par contre, est différent.
127 votes
C'est faux. COUNT(SomeColumn) retournera uniquement le nombre de lignes qui contiennent des valeurs non nulles pour SomeColumn. COUNT(*) et COUNT('Foo') retourneront le nombre total de lignes dans le tableau.
1 votes
Pour plus de détails, consultez ce document select count 1 vs select count * en détail avec graphique
5 votes
Wow Steve et j'étais ici 5 ans dans TSQL sans savoir count(*) vs Count(ColumnName). Merci
3 votes
Notez également les réponses aux questions suivantes
COUNT(*)
vsCOUNT(1)
vsCOUNT(pk)
- lequel est le meilleur ? . Il y a aussiCOUNT(*)
vsCOUNT(column-name)
- lequel est le plus correct ? . Il peut y avoir d'autres doublons.