Count(*) vs Count(1) - SQL Server

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Count(*) vs Count(1) - SQL Server

Message par ForumBot »

Count(*) vs Count(1) - SQL Server

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Count(*) vs Count(1) - SQL Server

Message par ayi »

Il n’y a aucune différence.


Raison :


Books on-line indique « 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.


C’est la même chose que EXISTS (SELECT * ... ou EXISTS (SELECT 1 ...


Exemple :


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êmes E/S, même plan, tout pareil


Modification, août 2011


Question similaire sur DBA.SE.


Modification, décembre 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.


C’est-à-dire que la norme ANSI reconnaît comme évident ce que vous voulez dire. COUNT(1) a été optimisé par les éditeurs de SGBDR à cause de cette superstition. Sinon, il serait évalué selon la norme ANSI


b) Sinon, soit TX la table à une seule colonne qui est le

résultat de l’application de la à chaque ligne de T

et de l’élimination des valeurs nulles. Si une ou plusieurs valeurs nulles sont

éliminées, alors une condition d’achèvement est levée : avertissement-

Répondre

Revenir à « SQL Server »