2011-11-26 8 views
5

クエリが返されるかどうかを知る必要があります。少なくとも1つの行を返すかどうかを調べる最速のクエリ

SELECT COUNT(*) FROM tbl WHERE conds; 

をしかし、これは行(もちろん)の正確な数を返し、私はこのオーバーヘッドを必要としない:

もちろん、私はこれを行うことができます。

だから私はこのクエリを考えた:1.

に内部クエリを制限

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

が速く、このですか?またはサブクエリを実行していると考えると、LIMIT 1のメリットがキャンセルされますか?

注:それは

答えて

7

2番目のクエリでインナー選択が冗長である仕事doens'tので、誰もがtheirselfを尋ねるために、私は最初のクエリにLIMIT 1を適用することはできません。
あなただけでは、少なくとも1列のチェックしたい場合: -

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

次に、I n 'mysql_num_rows($ result)'を呼び出すee? (私はmysqlのlibを使用していると仮定しましょう) – dynamic

+0

はい(15文字)... – ajreal

+0

ORDER BY NULLは必要ですか?それを提供することなく、同じではないでしょうか? – dynamic

3

理由だけではない:

SELECT 1 FROM tbl WHERE conds LIMIT 1 
0

あなたが行うことができます:

:よう

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

か何かを

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

'EXISTS(...)は' SELECT ... LIMIT 1'より効率的でしょうか? –