Ao ler alguma documentação relacionada ao SQL Tuning, encontrei o seguinte:
SELECT COUNT(*)
:
- Conta o número de linhas.
- Muitas vezes, é usado incorretamente para verificar a existência de um registro.
É SELECT COUNT(*)
realmente tão ruim assim?
Qual é a maneira correta de verificar a existência de um registro?
sql
optimization
query-optimization
systempuntoout
fonte
fonte
Eu preferiria não usar a função Count:
Por exemplo, se você deseja verificar se o usuário existe antes de inseri-lo no banco de dados, a consulta pode ser assim:
fonte
Você pode usar:
Se não houver registro correspondente à condição, o conjunto de registros resultante estará vazio.
fonte
As outras respostas são bastante boas, mas também seria útil adicionar
LIMIT 1
(ou equivalente) para impedir a verificação de linhas desnecessárias.fonte
irá percorrer todos os registros. Esta é a razão pela qual é ruim usar a existência de registros.
eu usaria
Depois de encontrar 1 registro, ele encerrará o loop.
fonte
SELECT TOP 1
ele realmente terminará depois de encontrar um ou continua a encontrar tudo para poder dizer qual é o TOP?IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
Você pode usar:
ou
Isso será mais eficiente do que
SELECT *
que se você simplesmente selecionar o valor 1 para cada linha, em vez de todos os campos.Há também uma diferença sutil entre COUNT (*) e COUNT (nome da coluna):
COUNT(*)
contará todas as linhas, incluindo nulosCOUNT(column name)
contará apenas ocorrências não nulas do nome da colunafonte
count(1)
ecount(*)
será diferente apenas no DBMS com morte cerebral.count(*)
ecount(1)
. Se é esse o caso de outros DBMS ', não posso dizer.Você pode usar:
Usar
select 1
para impedir a verificação de campos desnecessários.Use
LIMIT 1
para impedir a verificação de linhas desnecessárias.fonte
Estou usando desta maneira:
fonte
Outra opção:
fonte