サブクエリと結合 質問する

サブクエリと結合 質問する

他の会社から継承したアプリケーションの遅いセクションを、次のようなサブクエリの代わりに内部結合を使用するようにリファクタリングしました。

WHERE id IN (SELECT id FROM ...)

リファクタリングされたクエリは約 100 倍高速に実行されます。(約 50 秒から約 0.3 秒) 改善されると思っていましたが、なぜこれほど劇的なのか説明できる人はいますか? where 句で使用されている列はすべてインデックス化されていました。SQL は where 句のクエリを行ごとに 1 回実行するのでしょうか?

アップデート- 結果を説明します:

違いは、「where id in ()」クエリの2番目の部分にあります。

2   DEPENDENT SUBQUERY  submission_tags ref st_tag_id   st_tag_id   4   const   2966    Using where

結合された 1 つのインデックス行と比較:

    SIMPLE  s   eq_ref  PRIMARY PRIMARY 4   newsladder_production.st.submission_id  1   Using index

ベストアンサー1

「相関サブクエリ」(つまり、where 条件が包含クエリの行から取得された値に依存するサブクエリ) は、各行に対して 1 回実行されます。非相関サブクエリ (where 条件が包含クエリから独立しているサブクエリ) は、最初に 1 回実行されます。SQL エンジンは、この区別を自動的に行います。

しかし、そうですね、explain-plan は、汚い詳細を教えてくれます。

おすすめ記事