2016-01-13 10 views
5

クエリにLIMITを追加するとパフォーマンス上のメリットはありますか?またはMySQLが独自に制限を適用しますか?EXISTSクエリでLIMITを使用していますか?

例:

私のクエリでビットをいじる
IF EXISTS (
    SELECT 1 
     FROM my_table 
    LIMIT 1 -- can this improve performance? 
) 
THEN ... END IF; 
+0

はい...これにより、レコードを制限するため、パフォーマンスが向上します。 –

+0

'EXPLAIN'を使ってみましたか? –

+0

@TimBiegeleisen、はい、それは影響を受けていないようです。 – shmosel

答えて

10

EXISTS()の目的は、WHERE句に一致するそのテーブルのどの行がある場合、それは決めることができる唯一のまで、クエリを実行することです。つまり、論理的にはLIMIT 1と同じことを行います。 EXISTSはおそらくsemi-joinと呼ばれることがあります。

ボトムライン:LIMIT 1EXISTS()の内側に使用しないでください。

0

、私はEXISTSはまだLIMITが0に設定されている場合、私は、これはそれが無視されていたことを示し仮定1を返すことに気づきました。

+0

私は、「LIMIT 0」が異常なエッジケースであることを示唆しています。 –

0

これは、テーブルのレコード数(my_table)によって異なります。レコードが多すぎないとパフォーマンスは向上しませんが、テーブルのレコードが多すぎるとパフォーマンスが向上しますが、これも表示されますあなたが選択で使用されている列のインデックスを持っているかのように、多くの要素に依存します(これを行う場合、インデックスをカバーする利点も得られます)。

関連する問題