Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Contagem(*) vs Contagem(1) - SQL Server


Não há diferença.

Razão:

Livros on-line dizem "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" é uma expressão não nula:portanto, é o mesmo que COUNT(*) .O otimizador o reconhece pelo que é:trivial.

O mesmo que EXISTS (SELECT * ... ou EXISTS (SELECT 1 ...

Exemplo:
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

Mesmo IO, mesmo plano, as obras

Editar, agosto de 2011

Pergunta semelhante no DBA.SE.

Editar, dezembro de 2011

COUNT(*) é mencionado especificamente em ANSI-92 (procure por "Scalar expressions 125 ")

Caso:

a) Se COUNT(*) for especificado, o resultado será a cardinalidade de T.

Ou seja, o padrão ANSI reconhece como óbvio o que você quer dizer. COUNT(1) foi otimizado por fornecedores de RDBMS porque desta superstição. Caso contrário, seria avaliado de acordo com o ANSI

b) Caso contrário, seja TX a tabela de coluna única que é o resultado da aplicação da a cada linha de T e eliminando valores nulos. Se um ou mais valores nulos forem eliminados, uma condição de conclusão será gerada:warning-