Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Anzahl(*) vs. Anzahl(1) – SQL Server

Es gibt keinen Unterschied.

Grund:

Bücher online sagt "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" ist ein Nicht-Null-Ausdruck:also dasselbe wie COUNT(*) .Der Optimierer erkennt es als das, was es ist:trivial.

Dasselbe wie EXISTS (SELECT * ... oder EXISTS (SELECT 1 ...

Beispiel:

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

Gleiches IO, gleicher Plan, funktioniert

Bearbeiten, August 2011

Ähnliche Frage zu DBA.SE.

Bearbeiten, Dezember 2011

COUNT(*) wird speziell in ANSI-92 erwähnt (suchen Sie nach "Scalar expressions 125 ")

Fall:

a) Wenn COUNT(*) angegeben ist, dann ist das Ergebnis die Kardinalität von T.

Das heißt, der ANSI-Standard erkennt es als offensichtlich an, was Sie meinen. COUNT(1) wurde von RDBMS-Anbietern weil optimiert dieses Aberglaubens. Andernfalls würde es nach ANSI

ausgewertet werden

b) Andernfalls sei TX die einspaltige Tabelle, die das Ergebnis der Anwendung des auf jede Zeile von T ist und Nullwerte eliminiert. Wenn ein oder mehrere Nullwerte eliminiert werden, wird eine Beendigungsbedingung ausgelöst:warning-