2
respostas

Usar count(*) ou count(id)?

Gostaria de saber se existe alguma diferença de performance do banco se fizermos count(*) e fazendo count(id)? No exercício ficou claro que o count(coluna) retorna somente os valores não nulos, porém não foi discutida o caso do count(id) que retorna o mesmo resultado do count(*).

2 respostas

Bom dia Joseline,

A grande atenção é na questão de desempenho na consulta, quando você coloca o nome ele além de retornar os não nulos ele varre somente o campo desejado, quando você utiliza o (*) ele conta os nulos e varre outros campos para efeito de comparação.

Olá Josilene, tudo bem?

Só para complementar o que o Victor falou, quando você utiliza o COUNT(*) , ele irá contar o numero de registos(linhas), sem precisar acessar a tabela. Já quando utiliza o COUNT(id) ele ira contar os valores não nulos da coluna, precisando verificar cada linha individualmente. Como o ID é um campo obrigatório para preenchimento, em todas linhas estão preenchidas, o valor do COUNT(id) realmente sera o mesmo que o COUNT(*) .

Em relação a performance como o COUNT(*), não precisa acessar a tabela, ele é mais rápido que o COUNT(id) , você pode verificar essa performance com o seguinte comando:

EXPLAIN ANALYSE SELECT COUNT(id) FROM compras;

E depois executa o mesmo comando para o COUNT(*), para comparar os dois resultados.

Espero ter esclarecido a sua dúvida!