2011-09-27 11 views
6

Sto cercando il modo più veloce per controllare esiste quella voce ...Qual è il modo più veloce per verificare che la voce esista nel database?

Tutta la mia vita, ho fatto con qualcosa di simile ...

SELECT COUNT(`id`) FROM `table_name` 

Alcune persone non usano COUNT(id), ma COUNT(*). È più veloce?

Che dire di LIMIT 1?

P.S. Con id intendevo la chiave primaria, ovviamente.

Grazie in un consiglio!

+0

È preferibile utilizzare SELECT COUNT (1) FROM nome_tabella –

+3

Il modo più veloce per verificare una riga esistente nella tabella o veloce est modo per verificare che una tabella nel database abbia> 0 righe? –

risposta

7

Nella maggior parte delle situazioni, COUNT(*) è più veloce di COUNT(id) in MySQL (a causa di come raggruppamento query con COUNT() sono eseguito, potrebbe essere ottimizzato nelle versioni future in modo che entrambe le versioni funzionino allo stesso modo). Ma se volete solo per trovare se esiste almeno una riga, è possibile utilizzare EXISTS

semplice:

(SELECT COUNT(id) FROM table_name) > 0 

un po 'più veloce:

(SELECT COUNT(*) FROM table_name) > 0 

molto più veloce:

EXISTS (SELECT * FROM table_name) 
+0

Posso usare 'WHERE' x' = 'abc'' con questi esempi? Che dire di 'LIMIT 1'? Forse migliora anche le prestazioni? – daGrevis

+0

È possibile utilizzare qualsiasi condizione complessa all'interno di una di queste (WHERE, più join). Se 'id' non è annullabile, tutti e 3 sono equivalenti (entrambi restituiscono TRUE o FALSE nella stessa situazione). –

+1

'EXISTS' funziona come' LIMIT 1'. Quando viene trovata una riga che corrisponde ai criteri, smette di cercare altro. –

5

Se non sei preoccupato per la precisione, explain select count(field) from table è incredibilmente veloce.

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

Questo link spiega la differenza tra count(*) e count(field). In caso di dubbio, count(*)

Quanto a verificare che una tabella non è vuota ...

SELECT EXISTS(SELECT 1 FROM table)

Problemi correlati