ホームページ > データベース > mysql チュートリアル > LEFT JOIN が INNER JOIN よりも優れているのはどのような場合ですか?

LEFT JOIN が INNER JOIN よりも優れているのはどのような場合ですか?

Susan Sarandon
リリース: 2025-01-18 16:42:12
オリジナル
874 人が閲覧しました

When Does a LEFT JOIN Outperform an INNER JOIN?

左結合と内部結合: パフォーマンスのパラドックス

SQL Server では、INNER JOIN 操作の方が LEFT JOIN よりも効率的であると一般に想定されています。 ただし、パフォーマンスは驚くほど直感に反する場合があります。この記事では、LEFT JOININNER JOIN を大幅に上回ったシナリオについて説明します。

ケーススタディ:

最初に INNER JOIN を使用した 9 つのテーブルを含む複雑なクエリでは、パフォーマンスが低下しました。 LEFT JOIN に切り替えると、実行速度が大幅に向上しました。

なぜ予期せぬ速度向上?

一般通念は真実です。LEFT JOIN は一般に高速ではありません。これには、同じ INNER JOIN 処理に加えて、左側のテーブルから一致しない行に null 値を追加する追加の手順が含まれます。 結果セットが大きくなると、処理速度が遅くなる可能性もあります。

観察されたパフォーマンスの違いを理解する鍵は、関係するテーブルに主キー インデックスと外部キー インデックスが存在しないことにあります。このインデックス作成の欠如により、INNER JOIN の効率が大幅に妨げられました。

LEFT JOIN が勝つ可能性がある状況:

標準ではありませんが、LEFT JOININNER JOIN よりも優れたパフォーマンスを発揮する特定の条件があります。

  1. 小さなテーブル: 非常に小さなテーブル (10 行未満) では、ハッシュベースの INNER JOIN 操作のオーバーヘッドが、LEFT JOIN 実行プランで通常使用されるネストされたループのオーバーヘッドを上回る可能性があります。

  2. インデックスが不十分です: インデックスが欠落しているか、INNER JOIN に対して不十分な場合、SQL Server は効率の低い実行プランを選択する可能性があります。 LEFT JOIN ネストされたループを活用すると、パフォーマンスが向上する可能性があります。

要約:

LEFT JOIN は本質的に INNER JOIN よりも多くの処理を必要としますが、小さなテーブルが含まれる状況や適切なインデックス付けが欠如している状況では、LEFT JOIN の予期しないパフォーマンス上の利点が生じる可能性があります。 上記のケーススタディでは、適切なインデックスが存在しないことが原因と考えられます。

以上がLEFT JOIN が INNER JOIN よりも優れているのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート