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!
Eita, pior que achava que count(1) seria mais rápido. no fundo não faz diferença. Este outro mito desmentido. obrigado pelo post