2016-07-09 7 views
0

2つのサブクエリ(またはテーブルとサブクエリ)間の結合操作では、外部クエリではなく内部クエリでLIMIT句を指定することをお勧めしますwhere句をチェックするためにDBMSが反復しなければならない行の量を決定する)以下のような:mysqlのパフォーマンスがサブクエリとリミットとの結合

(( SELECT id FROM Table1 WHERE score>=100 LIMIT 10) AS A NATURAL JOIN Table2 ))

は、表1のすべての行私の思考は、最後のクエリでは、DBMSは、最初の(完全なテーブルまたはインデックス)を反復処理する必要があるということです

(( SELECT id FROM Table1 WHERE score>=100) AS A NATURAL JOIN Table2 )) LIMIT 10

よりも良いだろうスコア> = 100で、共通列(任意の行数)でTable2にマップすることができ、それ以降は10行にしか切り捨てられませんが、最初のクエリでは、 where句を満たしTable2にマッピングできるTable1の10行を見つけましたen stop ....

答えて

1

2つの部分文は同等ではありません。 LIMITご注文の際はご注意ください。 Table1に上限を設定している場合は、データセット全体に制限を設けて表示されていた行が表示されないことがあります。その免責事項を考えれば、それは限界を使用するように思えますし、結合はより効率的ですが、経験則は常に測定するべきです。

SELECT t0.col0, t1.col1 
FROM 
    Table0 t0 
    JOIN Table1 t1 ON (t0.col0 = t1.col0 AND t1.score >= 100) 

場合でも、より効率的かもしれません:

はまた、代わりに、MySQLは内部の一時テーブルを作成する必要がありますするテーブルとしてSELECTを、参加の、あなたがテーブル自体、すなわちに参加することができることを考えますあなたは良いインデックスを持っていて、それらを使用することになります。しかし再び、あなたは測定すべきです。

関連する問題