2011-09-27 14 views
6

Busco la manera más rápida para comprobar que existe la entrada ...¿Cuál es la forma más rápida de verificar que la entrada exista en la base de datos?

Toda mi vida, lo hice con algo como esto ...

SELECT COUNT(`id`) FROM `table_name` 

Algunas personas no utilizan COUNT(id), pero COUNT(*). ¿Es eso más rápido?

¿Qué hay de LIMIT 1?

P.S. Con id quise decir clave principal, por supuesto.

Gracias en un consejo!

+0

Se prefiere que use SELECT COUNT (1) FROM table_name –

+3

La forma más rápida de verificar una fila existe en la tabla o rápido ¿Es una forma de verificar que una tabla en la base de datos tenga> 0 filas? –

Respuesta

7

En la mayoría de situaciones, es más rápido que COUNT(*)COUNT(id) en MySQL (por la forma en consultas agrupación con COUNT() son ejecutado, puede optimizarse en versiones futuras para que ambas versiones se ejecuten de la misma manera). Pero si sólo quiere encontrar si existe al menos una fila, puede utilizar EXISTS

simple:

(SELECT COUNT(id) FROM table_name) > 0 

un poco más rápido:

(SELECT COUNT(*) FROM table_name) > 0 

mucho más rápido:

EXISTS (SELECT * FROM table_name) 
+0

¿Puedo usar 'WHERE' x' = 'abc'' con estos ejemplos? ¿Qué pasa con 'LIMIT 1'? ¿Tal vez impulse el rendimiento también? – daGrevis

+0

Puede usar cualquier condición compleja dentro de cualquiera de estos (DONDE, múltiples UNIONES). Si 'id' no puede contener nulos, los 3 son equivalentes (cualquiera de ellos devuelve VERDADERO o FALSO en la misma situación). –

+1

'EXISTS' en realidad funciona como' LIMIT 1'. Cuando se encuentra una fila que coincide con los criterios, deja de buscar más. –

5

Si no le preocupa la precisión, explain select count(field) from table es increíblemente rápido.

http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

Este enlace explica la diferencia entre count(*) y count(field). En caso de duda, count(*)

En cuanto a la comprobación de que una tabla no está vacía ...

SELECT EXISTS(SELECT 1 FROM table)

Cuestiones relacionadas