ホームページ > データベース > mysql チュートリアル > INNER JOIN と LEFT JOIN: どちらが他よりも大幅に高速になるのはどのような場合ですか?

INNER JOIN と LEFT JOIN: どちらが他よりも大幅に高速になるのはどのような場合ですか?

Barbara Streisand
リリース: 2025-01-18 16:33:14
オリジナル
977 人が閲覧しました

INNER JOIN vs. LEFT JOIN: When is One Significantly Faster Than the Other?

SQL Server の INNER JOIN と LEFT JOIN のパフォーマンスの違いの詳細な説明

SQL Server では、多くの場合、パフォーマンスに関する考慮事項がクエリ最適化の決定の鍵となります。 INNER JOIN と LEFT JOIN のどちらを選択するかは、特に複数のテーブルを含むクエリの場合によくある質問です。 LEFT JOIN は本質的に高速であるとよく考えられますが、これは必ずしも真実ではありません。

通常、LEFT JOIN が速くならないのはなぜですか?

LEFT JOIN は、右側のテーブルに一致する行がない場合でも、左側のテーブルのすべての行を取得します。対照的に、INNER JOIN は一致が見つかった行のみを返します。これは、LEFT JOIN 自体がより多くの作業を実行し、より多くの結果行を生成するため、実行時間が長くなる可能性があることを意味します。

例外: LEFT JOIN が高速になるのはどのような場合ですか?

まれに、特定の要因により LEFT JOIN が INNER JOIN より高速になる場合があります。主な理由は次のとおりです。

  • 非常に小さなテーブル: 関連するテーブルが非常に小さい (10 行未満など) 場合、ハッシュ一致 (INNER JOIN で使用) のオーバーヘッドが、ネストされたループ (INNER JOIN で使用) のオーバーヘッドを超える可能性があります。 LEFT JOIN による) コスト。
  • 十分なインデックスがありません: テーブルに INNER JOIN をサポートするための適切なインデックスが不足している場合、SQL Server は効率の低い実行プランを選択する可能性があり、その結果クエリが遅くなることがあります。この場合、LEFT JOIN を使用したネストされたループの方が望ましい場合があります。

次の例を考えてみましょう:

<code class="language-sql">CREATE TABLE #Test1 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test1 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

CREATE TABLE #Test2 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test2 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

SELECT *
FROM #Test1 t1
INNER JOIN #Test2 t2
ON t2.Name = t1.Name

SELECT *
FROM #Test1 t1
LEFT JOIN #Test2 t2
ON t2.Name = t1.Name

DROP TABLE #Test1
DROP TABLE #Test2</code>
ログイン後にコピー

これらの小さなテーブルで実行すると、ハッシュ マッチングのオーバーヘッドが追加の結果サイズのコストを上回るため、LEFT JOIN クエリはわずかに高速になります。ただし、10 行を超える大きなテーブルでは、INNER JOIN クエリの方がはるかに高速です。

結論

ほとんどの場合、実行速度の点では、INNER JOIN の方が LEFT JOIN よりも優れたパフォーマンスを発揮します。例外は、非常に小さなテーブルや不十分なインデックスを含む非常に特殊な条件に限定されます。したがって、パフォーマンス上の理由だけで INNER JOIN を LEFT JOIN に置き換えるのではなく、クエリの設計とインデックスを徹底的に調査して潜在的なパフォーマンスのボトルネックを特定することが重要です。

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

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