2011-11-26 12 views
5

Sadece bir sorgu döndürüp döndürmediğini bilmek istiyorum.En az bir satır döndürüp döndürmediğini görmek için en hızlı sorgu

SELECT COUNT(*) FROM tbl WHERE conds; 

Ama bu satırların (elbette) sayısını tam olarak verir ve bu yükü gerekmez:

Elbette bunu yapabilirsiniz.

Yani bu sorguyu düşündüm: Bu hızlı 1.

için

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

iç sorgu sınırlama var mı? Ya da bir alt sorgu yapıyorum, LIMIT 1'un faydalarını iptal eder?

Not:

cevap

7

ikinci sorguda iç-select gereksiz işe doens't çünkü herkes theirself soran, ilk sorguya LIMIT 1 uygulayamazsınız.
sadece tek satır-en azından kontrol etmek istiyorsanız: -

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

Ve sonra ben n bir mysql_num_rows ($ sonuç) 'i çağırmak için? (Mysql lib kullanıyorum diyelim) – dynamic

+0

Evet (gitmek için 15 chars) ... – ajreal

+0

SİPARİŞ NULLERİ NULLEDİR? sağlamazsa aynı olmaz mıydı? – dynamic

3

Neden sadece:

SELECT 1 FROM tbl WHERE conds LIMIT 1 
0

Sen yapabilirdi:

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

Veya böyle bir şey:

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

'' EXISTS (...) '' SELECT ... LIMIT 1' 'den daha mı etkili olur? –

İlgili konular