クエリの最適化: サブクエリを結合に置き換えることによる劇的な効果
最近のアプリケーションのリファクタリングでは、サブクエリを内部結合に置き換えることでパフォーマンスが大幅に向上しました。元のコードでは、WHERE
句でサブクエリを使用していました:
<code class="language-sql">WHERE id IN (SELECT id FROM ...)</code>
この変更により 100 倍という驚異的な高速化が実現し、実行時間が 50 秒から 0.3 秒に短縮されました。 ここで疑問が生じます: なぜこれほど大きな違いがあるのでしょうか?
鍵となるのは、サブクエリの動作を理解することです。 相関サブクエリ (サブクエリの WHERE
句が外側のクエリの値に依存する場合) は、外側のクエリの行ごとに繰り返し実行されます。 この繰り返しの実行は非常に非効率的です。 対照的に、非相関サブクエリは 1 回だけ実行されます。
元のサブクエリは関連付けられていました。 処理される行ごとにデータベースはサブクエリを実行する必要があり、多数の検索が行われました。
サブクエリを内部結合に置き換えることで、データベースがインデックス検索を効率的に利用できるようになりました。結合条件 (例: submission_id = st_tag_id
) により、条件を満たす行ごとに 1 つのインデックス付きルックアップが可能になりました。これによりデータベース アクセスが大幅に減少し、パフォーマンスの飛躍的な向上が説明されました。
レッスンですか? SQL クエリの最適化には、サブクエリと結合を注意深く考慮することが不可欠です。相関サブクエリと非相関サブクエリ、およびそのパフォーマンスへの影響を理解すると、開発者は大幅に高速かつ効率的なデータベース クエリを作成できるようになります。
以上がサブクエリと結合: サブクエリを結合に置き換えるとパフォーマンスが 100 倍向上したのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。