No hay diferencia.
Razón:
Los libros en línea dicen "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
"
"1" es una expresión no nula:por lo que es lo mismo que COUNT(*)
.El optimizador lo reconoce por lo que es:trivial.
Lo mismo 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
Mismo IO, mismo plan, las obras
Editar, agosto de 2011
Pregunta similar en DBA.SE.
Editar, diciembre de 2011
COUNT(*)
se menciona específicamente en ANSI-92 (busque "Scalar expressions 125
")
Caso:
a) Si se especifica COUNT(*), entonces el resultado es la cardinalidad de T.
Es decir, el estándar ANSI reconoce como sangrando obvio lo que quiere decir. COUNT(1)
ha sido optimizado por proveedores de RDBMS porque de esta superstición. De lo contrario, se evaluaría según ANSI
b) De lo contrario, sea TX la tabla de una sola columna que es el resultado de aplicar la