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'