sql >> Base de Datos >  >> RDS >> Sqlserver

Recuento(*) frente a Recuento(1) - SQL Server

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 a cada fila de T y eliminar los valores nulos. Si se eliminan uno o más valores nulos, se genera una condición de finalización:advertencia-