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 より高速になる場合があります。主な理由は次のとおりです。
例
次の例を考えてみましょう:
<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 サイトの他の関連記事を参照してください。