2011-09-27 14 views
6

O girdi var kontrol etmek için hızlı yol arıyorum ...Bu girdinin veritabanında olup olmadığını kontrol etmenin en hızlı yolu nedir?

Hayatım, ben ... Böyle bir şey

SELECT COUNT(`id`) FROM `table_name` 

Bazı insanlar COUNT(id) kullanmayın did ancak COUNT(*). Bu daha hızlı mı?

LIMIT 1 nedir?

P.S. id ile, birincil anahtar anlamına geldim elbette.

Bir teşekkür ederiz!

+0

SELECT COUNT kullanmanız tercih edilir (1) FROM table_name –

+3

Tablodaki veya satırdaki bir satırı kontrol etmenin en hızlı yolu veritabanındaki bir tablonun> 0 satırı olduğunu kontrol etmenin en iyi yolu nedir? –

cevap

7

, COUNT(*) çünkü ne kadar gruplandırma sorguları COUNT() ile olan arasında (MySQL COUNT(id) daha hızlıdır Şüpheye düşerseniz yürütüldüğünde, gelecekteki sürümlerde optimize edilebilir, böylece her iki sürüm de aynı şekilde çalışır. En az bir satır varsa sadece bulmak istiyorsanız, kullanabileceğiniz EXISTS

basit:

biraz daha hızlı
(SELECT COUNT(id) FROM table_name) > 0 

:

(SELECT COUNT(*) FROM table_name) > 0 

çok daha hızlı:

EXISTS (SELECT * FROM table_name) 
+0

Bu örnekle 'WHERE' x' = 'abc' kullanabilir miyim? LİMİT 1 'ne? Belki de performansı artırır? – daGrevis

+0

Bunlardan herhangi bir karmaşık koşul kullanabilirsiniz (WHERE, çoklu JOIN'ler). Eğer 'id' null değilse, her 3 eşdeğerdir (aynı durumda TRUE veya FALSE döndürür). –

+1

'EXISTS' aslında 'LIMIT 1' gibi çalışır. Ölçütlerle eşleşen bir satır bulunduğunda, daha fazla arama yapmayı durdurur. –

5

Doğruluk konusunda endişelenmiyorsanız, explain select count(field) from table son derece hızlıdır.

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

Bu bağlantı count(*) ve count(field) arasındaki farkı açıklar. Bir tablo boş olmadığını kontrol gelince

count(*) ... Çoğu durumda

SELECT EXISTS(SELECT 1 FROM table)