Mientras leía documentación relacionada con SQL Tuning, encontré esto:
SELECT COUNT(*)
:
- Cuenta el número de filas.
- A menudo se usa incorrectamente para verificar la existencia de un registro.
¿Es SELECT COUNT(*)
realmente tan malo?
¿Cuál es la forma correcta de verificar la existencia de un registro?
sql
optimization
query-optimization
systemmpuntoout
fuente
fuente
Preferiría no usar la función Count en absoluto:
Por ejemplo, si desea verificar si el usuario existe antes de insertarlo en la base de datos, la consulta puede verse así:
fuente
Puedes usar:
Si no hay ningún registro que coincida con la condición, el conjunto de registros resultante está vacío.
fuente
Las otras respuestas son bastante buenas, pero también sería útil agregar
LIMIT 1
(o el equivalente , para evitar la verificación de filas innecesarias.fuente
recorrerá todos los registros. Esta es la razón por la que es malo usarlo para la existencia de registros.
yo usaría
Después de encontrar 1 registro, terminará el ciclo.
fuente
SELECT TOP 1
que realmente termine después de encontrar uno o continúa encontrando todos para poder decir cuál es TOP?IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
Puedes usar:
o
Esto será más eficiente que
SELECT *
simplemente seleccionando el valor 1 para cada fila, en lugar de todos los campos.También hay una sutil diferencia entre COUNT (*) y COUNT (nombre de columna):
COUNT(*)
contará todas las filas, incluidas las nulasCOUNT(column name)
solo contará las ocurrencias no nulas del nombre de la columnafuente
count(1)
ycount(*)
será diferente solo en los DBMS con mayor muerte cerebral.count(*)
ycount(1)
. Si ese es el caso de otros DBMS ', no puedo decir.Puedes usar:
Se usa
select 1
para evitar la comprobación de campos innecesarios.Se usa
LIMIT 1
para evitar la comprobación de filas innecesarias.fuente
Estoy usando de esta manera:
fuente
Otra opción:
fuente