O que é mais rápido: SELECT COUNT(1) ou SELECT COUNT(*) ?

Fala pessoal, no post de hoje vou responder a essa pergunta, afinal o que é mais rápido?


Por conceito, quando usamos * estamos dizendo ao SQL Server que desejamos que ele nos retorne todas as colunas de uma determinada tabela, por outro lado quando informamos o 1 (por exemplo), quando usado entre o SELECT e o FROM estamos dizendo ao SQL que desejamos que ele nos retorne (na maioria das vezes) a primeira coluna da tabela apenas.


Com isso em mente a lógica seria dizer que:

- Quando usamos o COUNT(*) estamos pedindo para contar todas as linhas de todas as colunas, por exemplo COUNT(ID,NOME,IDADE,TEL,ENDERECO...).

- Quando usamos o COUNT(1) estamos pedindo para contar todas as linhas usando como referência apenas a coluna 1, por exemplo COUNT(ID) .


Em tese o COUNT(1) seria mais rápido e consumiria inclusive menos memória, pois imagine uma tabela com 200 colunas, para que retornar todas elas se apenas uma já é suficiente para contar as linhas que é o que desejamos!

Em alguns momentos fiquei nessa dúvida, mas analisando mais a fundo percebemos algo surpreendente.


Vamos botar a mão na massa!


Estou utilizando uma tabela que criei com 3.287.295 registros


Ao verificarmos o plano de execução dos dois COUNTs vemos exatamente o mesmo resultado, mesmo custo, ou seja esta exatamente igual.


Para confirmar podemos selecionar o Stream Aggregate do plano de execução do COUNT(1) e ir em propriedades (F4). Procure pelo item Default Values.



Ou seja, mesmo informando (1), por trás dos panos o SQL Server executa um COUNT(*), por isso o tempo, consumo e o plano de execução são exatamente os mesmos.


Conta aí, já pensou em alguma situação que o COUNT(1) era mais rápido não?!?!


=)


Nos acompanhe em nossas redes sociais!

Youtube(vídeos novos todas as quartas): https://www.youtube.com/channel/UChFeqc-m7HZNdkoP0CshMGQ

Face & Instagram(conteúdo diário): dba on boarding

Até a próxima, tchau!

#CG_Administration




115 visualizações0 comentário

Posts recentes

Ver tudo