Isso significa COUNT(any_non_null_column)que dará o mesmo, COUNT(*)é claro, porque não há valores NULL para causar diferenças.
Geralmente, COUNT(*)deve ser melhor porque qualquer índice pode ser usado porque COUNT(column_or_expression)não pode ser indexado ou SARGable
De ANSI-92 (procure por " Scalar expressions 125")
Caso:
a) Se COUNT(*) for especificado, o resultado será a cardinalidade de T.
b) Caso contrário, seja TX a tabela de coluna única que é o resultado da aplicação da <expressão de valor> a cada linha de T e da eliminação de valores nulos. Se um ou mais valores nulos forem eliminados, uma condição de conclusão será levantada: warning- null value eliminado na função set.
As mesmas regras se aplicam ao SQL Server e Sybase também , pelo menos
Nota: COUNT(1) é o mesmo que COUNT(*) porque 1 é uma expressão não anulável.
No livro Oracle8i Certified Professional DBA Certification Exam Guide (ISBN 0072130601) , a página 78 diz que COUNT(1) será executado mais rápido que COUNT(*) porque certos mecanismos são acionados para verificar o dicionário de dados para a nulidade de cada coluna (ou pelo menos a primeira coluna com não nulidade) ao usar COUNT(*) . COUNT(1) ignora esses mecanismos.
Fraudes do MySQL para 'SELECT COUNT(1) on tblname;' em tabelas MyISAM lendo o cabeçalho da tabela para a contagem da tabela. O InnoDB conta sempre.
Para testar se COUNT(1) será executado mais rápido que COUNT(*) de forma independente de banco de dados, basta executar o seguinte e julgar o tempo de execução por si mesmo:
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
Isso faz com que a função COUNT opere no mesmo nível de jogo, independentemente do mecanismo de armazenamento ou RDBMS.
Isso significa
COUNT(any_non_null_column)
que dará o mesmo,COUNT(*)
é claro, porque não há valores NULL para causar diferenças.Geralmente,
COUNT(*)
deve ser melhor porque qualquer índice pode ser usado porqueCOUNT(column_or_expression)
não pode ser indexado ou SARGableDe ANSI-92 (procure por "
Scalar expressions 125
")As mesmas regras se aplicam ao SQL Server e Sybase também , pelo menos
Nota: COUNT(1) é o mesmo que COUNT(*) porque 1 é uma expressão não anulável.
Em qualquer versão recente (ou seja, 8.x+ ) do Oracle, eles fazem a mesma coisa . Em outras palavras, a única diferença é semântica:
é facilmente legível e óbvio o que você está tentando fazer, e
é mais difícil de ler porque
any_non_null_column
realmente é aplicado comonot null
Resumindo, use
count(*)
Em uma versão recente, de fato, não há diferença entre count(*) e count( any not null column ), com ênfase em not null :-) (*)?
No livro Oracle8i Certified Professional DBA Certification Exam Guide (ISBN 0072130601) , a página 78 diz que COUNT(1) será executado mais rápido que COUNT(*) porque certos mecanismos são acionados para verificar o dicionário de dados para a nulidade de cada coluna (ou pelo menos a primeira coluna com não nulidade) ao usar COUNT(*) . COUNT(1) ignora esses mecanismos.
Fraudes do MySQL para 'SELECT COUNT(1) on tblname;' em tabelas MyISAM lendo o cabeçalho da tabela para a contagem da tabela. O InnoDB conta sempre.
Para testar se COUNT(1) será executado mais rápido que COUNT(*) de forma independente de banco de dados, basta executar o seguinte e julgar o tempo de execução por si mesmo:
Isso faz com que a função COUNT opere no mesmo nível de jogo, independentemente do mecanismo de armazenamento ou RDBMS.