2011-11-26 16 views
5

Sólo necesito saber si una consulta devuelve o no un registro.consulta rápida para ver si devuelve al menos una fila

Por supuesto que puedo hacer esto:

SELECT COUNT(*) FROM tbl WHERE conds; 

Pero esto devuelve el número exacto de filas (por supuesto), y no necesito esta sobrecarga.

Así que pensé que esta consulta:

SELECT COUNT(*) FROM (SELECT id FROM tbl WHERE conds LIMIT 1) as t1 

Limitar la consulta interna a 1.

es más rápido? ¿O considerando que estoy haciendo una subconsulta, cancela los beneficios de LIMIT 1?

Nota: para todo el mundo pidiendo theirself, no puedo aplicar LIMIT 1 a la primera consulta porque doens't trabajar

Respuesta

7

El centro de la selección en la segunda consulta es redundante.
Si lo que desea es comprobar en-menos de una fila: -

SELECT 1 FROM tbl // return 1 
WHERE conds  // depends on your index and query 
ORDER BY NULL  // avoid file-sort 
LIMIT 1;   // minimum row 
+0

Y entonces n eed para llamar a un 'mysql_num_rows ($ result)'? (Digamos que estoy usando MySQL lib) – dynamic

+0

Sí (15 Caracteres restantes) ... – ajreal

+0

es el orden por Null necessarly? sin proporcionarlo, ¿no sería lo mismo? No – dynamic

3

¿Por qué no:

SELECT 1 FROM tbl WHERE conds LIMIT 1 
0

que podría hacer:

SELECT 1 WHERE EXISTS(SELECT id FROM tbl WHERE CONDITION) 

O algo como:

SELECT 1 WHERE EXISTS (SELECT id FROM tbl WHERE id IN(1000, 1001)) 
+0

¿Sería 'EXISTE (...)' ser más eficiente que un SELECT ... LIMIT 1'? –

Cuestiones relacionadas