ホームページ >データベース >mysql チュートリアル >サブクエリと結合: 結合によってパフォーマンスが 100 倍向上するのはいつですか?

サブクエリと結合: 結合によってパフォーマンスが 100 倍向上するのはいつですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-17 16:53:13463ブラウズ

Subqueries vs. Joins: When Does a Join Offer a 100x Performance Boost?

サブクエリと結合: パフォーマンスの最適化が明らかに

最近のアプリケーションのアップグレードでは、サブクエリを結合に置き換えることにより、パフォーマンスが大幅に向上し、速度が 100 倍向上しました。これは、これらの SQL 手法間の効率の大きな違いを浮き彫りにします。 元のコードでは WHERE 句でサブクエリを使用していました。最適化されたバージョンでは内部結合が使用されていました。 なぜこれほど大きな違いが生じたのかを見てみましょう。

パフォーマンスの不一致を理解する

中心的な問題は、SQL が 相関 サブクエリ、つまり WHERE 句が外部クエリのデータに依存するサブクエリをどのように処理するかにあります。 相関サブクエリは、外側のクエリの行ごとに 1 回ずつ繰り返し実行されるため、大幅なオーバーヘッドが発生します。 非相関 サブクエリは、独立した WHERE 句を使用して 1 回だけ実行されます。

実行計画分析

実行計画を分析すると、パフォーマンスのボトルネックが明らかになります。元のサブクエリ:

<code class="language-sql">WHERE id IN (SELECT id FROM ...)</code>

相関サブクエリの 1 行あたり 4 秒の実行時間を実証しました:

<code>2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where</code>

ただし、リファクタリングされた内部結合では、実行時間が大幅に改善されました。

<code class="language-sql">eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index</code>

インデックス付き行ごとに処理時間が 1 秒に短縮されました。

重要なポイント

パフォーマンスが 100 倍向上したのは、コストのかかる相関サブクエリを排除したことによるものです。内部結合により、SQL エンジンはクエリの実行を最適化し、処理時間を大幅に短縮できました。

重要な考慮事項

データベースの最適化には、相関サブクエリと非相関サブクエリの違いを理解することが不可欠です。クエリ プラン分析ツールを使用すると、開発者はパフォーマンスのボトルネックを特定し、効率的なソリューションを実装できます。

以上がサブクエリと結合: 結合によってパフォーマンスが 100 倍向上するのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。