別の会社から継承したアプリケーションの遅いセクションをリファクタリングして、次のようなサブクエリの代わりに内部結合を使用しました。
WHERE id IN (SELECT id FROM ...)
リファクタリングされたクエリは、約 100 倍速く実行されます。(約 50 秒から約 0.3 秒) 改善を期待していましたが、なぜ劇的な改善になったのか説明できる人はいますか? where 句で使用される列はすべてインデックス化されています。SQL は、行ごとに 1 回、where 句でクエリを実行しますか?
更新- 結果の説明:
違いは、「where id in ()」クエリの 2 番目の部分にあります。
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 結合を含む 1 つのインデックス付き行:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index