Non c'è differenza.
Motivo:
I libri in linea dicono "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
"
"1" è un'espressione non nulla:quindi è uguale a COUNT(*)
.L'ottimizzatore lo riconosce per quello che è:banale.
Lo stesso di EXISTS (SELECT * ...
o EXISTS (SELECT 1 ...
Esempio:
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
Stesso IO, stesso progetto, i lavori
Modifica, agosto 2011
Domanda simile su DBA.SE.
Modifica, dicembre 2011
COUNT(*)
è menzionato specificamente in ANSI-92 (cercare "Scalar expressions 125
")
Caso:
a) Se viene specificato COUNT(*), il risultato è la cardinalità di T.
Cioè, lo standard ANSI lo riconosce come sanguinante ovvio cosa intendi. COUNT(1)
è stato ottimizzato dai fornitori di RDBMS perché di questa superstizione. In caso contrario verrebbe valutato come da ANSI
b) In caso contrario, sia TX la tabella a colonna singola risultante dall'applicazione dell'