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

SELECT COUNT(coluna) é mais rápido/mais lento que SELECT COUNT(*)?


Eu tentei alguns SELECT COUNT(*) FROM MyTable vs. SELECT COUNT(SomeColumn) FROM MyTable com vários tamanhos de tabelas, e onde o SomeColumn uma vez é uma coluna de chave de cluster, uma vez que está em um índice não clusterizado e uma vez que não está em nenhum índice.

Em todos os casos, com todos os tamanhos de tabelas (de 300.000 linhas a 170 milhões de linhas), nunca vejo qualquer diferença em termos de velocidade ou plano de execução - em todos os casos, o COUNT é tratado fazendo uma varredura de índice clusterizado --> ou seja, varrendo toda a tabela, basicamente. Se houver um índice não clusterizado envolvido, a varredura será nesse índice - mesmo ao fazer um SELECT COUNT(*) !

Não parece haver nenhuma diferença em termos de velocidade ou abordagem de como essas coisas são contadas - para contá-las todas, o SQL Server só precisa verificar a tabela inteira - ponto final.

Os testes foram feitos no SQL Server 2008 R2 Developer Edition