2011-11-26 19 views
5

Ho solo bisogno di sapere se una query restituisce o meno un record.Query più veloce per vedere se restituisce almeno una riga

Certo che posso fare questo:

SELECT COUNT(*) FROM tbl WHERE conds; 

Ma questo restituisce il numero esatto di righe (ovviamente), e non ho bisogno di questo overhead.

così ho pensato questa query:

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

Limitare la query interna a 1.

È questo il più veloce? O considerando che sto facendo una subquery cancella i benefici di LIMIT 1?

Nota: per tutti chiedendo theirself, non posso applicare LIMIT 1 per la prima query perché doens't lavoro

risposta

7

L'interno di selezione nella seconda query è ridondante.
Se volete solo controllare at-almeno di una riga: -

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

E poi I n eed per chiamare un 'mysql_num_rows ($ result)'? (Diciamo che sto usando mysql lib) – dynamic

+0

Sì (15 caratteri per andare) ... – ajreal

+0

È necessario ORDINARE DA NULL? senza fornire non sarebbe lo stesso? – dynamic

3

Perché non basta:

SELECT 1 FROM tbl WHERE conds LIMIT 1 
0

si potrebbe fare:

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

O qualcosa di simile:

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

"EXISTS (...)" sarebbe più efficiente di un "SELECT ... LIMIT 1'? –

Problemi correlati