ホームページ >データベース >mysql チュートリアル >LEFT JOIN が INNER JOIN よりも優れているのはどのような場合ですか?
左結合と内部結合: パフォーマンスのパラドックス
SQL Server では、INNER JOIN
操作の方が LEFT JOIN
よりも効率的であると一般に想定されています。 ただし、パフォーマンスは驚くほど直感に反する場合があります。この記事では、LEFT JOIN
が INNER JOIN
を大幅に上回ったシナリオについて説明します。
ケーススタディ:
最初に INNER JOIN
を使用した 9 つのテーブルを含む複雑なクエリでは、パフォーマンスが低下しました。 LEFT JOIN
に切り替えると、実行速度が大幅に向上しました。
なぜ予期せぬ速度向上?
一般通念は真実です。LEFT JOIN
は一般に高速ではありません。これには、同じ INNER JOIN
処理に加えて、左側のテーブルから一致しない行に null 値を追加する追加の手順が含まれます。 結果セットが大きくなると、処理速度が遅くなる可能性もあります。
観察されたパフォーマンスの違いを理解する鍵は、関係するテーブルに主キー インデックスと外部キー インデックスが存在しないことにあります。このインデックス作成の欠如により、INNER JOIN
の効率が大幅に妨げられました。
LEFT JOIN が勝つ可能性がある状況:
標準ではありませんが、LEFT JOIN
が INNER JOIN
よりも優れたパフォーマンスを発揮する特定の条件があります。
小さなテーブル: 非常に小さなテーブル (10 行未満) では、ハッシュベースの INNER JOIN
操作のオーバーヘッドが、LEFT JOIN
実行プランで通常使用されるネストされたループのオーバーヘッドを上回る可能性があります。
インデックスが不十分です: インデックスが欠落しているか、INNER JOIN
に対して不十分な場合、SQL Server は効率の低い実行プランを選択する可能性があります。 LEFT JOIN
ネストされたループを活用すると、パフォーマンスが向上する可能性があります。
要約:
LEFT JOIN
は本質的に INNER JOIN
よりも多くの処理を必要としますが、小さなテーブルが含まれる状況や適切なインデックス付けが欠如している状況では、LEFT JOIN
の予期しないパフォーマンス上の利点が生じる可能性があります。 上記のケーススタディでは、適切なインデックスが存在しないことが原因と考えられます。
以上がLEFT JOIN が INNER JOIN よりも優れているのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。