SQL Server の結合パフォーマンス: LEFT JOIN の誤解を暴く
SQL Server の結合パフォーマンスに関してよくある誤解が存在します。それは、LEFT JOIN
操作は本質的に INNER JOIN
操作よりも高速であるということです。 これは一般に不正確です。 LEFT JOIN
は、INNER JOIN
のすべての作業を実行してから、適切なテーブル内の一致しないエントリに対して NULL
値を持つ行を追加する必要があるため、余分な処理オーバーヘッドが生じます。 結果セットが大きくなることも、実行時間の増加につながります。
あなたの LEFT JOIN
の方が速かったかもしれない理由
LEFT JOIN
クエリの速度が速くなった場合、その理由はおそらく結合タイプ自体に関係のない要因に起因すると考えられます。
LEFT JOIN
のオーバーヘッドは、他のクエリ操作に費やされる時間と比較して無視できる可能性があります。LEFT JOIN
が有利になる可能性があるとき
LEFT JOIN
が INNER JOIN
を上回る可能性がある唯一のシナリオは、非常に特殊な条件下です:
LEFT JOIN
オーバーヘッドはインデックス関連のパフォーマンスの問題よりも重要ではありません。具体例
次のテーブルについて考えてみましょう:
<code class="language-sql">CREATE TABLE #Test1 (ID int PRIMARY KEY, Name varchar(50) NOT NULL); CREATE TABLE #Test2 (ID int PRIMARY KEY, Name varchar(50) NOT NULL); INSERT INTO #Test1 VALUES (1, 'One'), (2, 'Two'), (3, 'Three'); INSERT INTO #Test2 VALUES (1, 'One'), (2, 'Two'), (3, 'Three');</code>
INNER JOIN
クエリ:
<code class="language-sql">SELECT * FROM #Test1 t1 INNER JOIN #Test2 t2 ON t2.Name = t1.Name;</code>
LEFT JOIN
クエリ:
<code class="language-sql">SELECT * FROM #Test1 t1 LEFT JOIN #Test2 t2 ON t2.Name = t1.Name;</code>
この最小限の例では、行数が少なくインデックスがないため、LEFT JOIN
の表示が高速になる可能性があります。ただし、結合条件で ID
列 (主キー) を使用した場合、インデックスが効率的に使用されるため、INNER JOIN
の方が大幅に高速になります。 これは、結合タイプに関係なく、結合パフォーマンスを最適化する上で適切なインデックス作成の重要性を強調しています。
以上がSQL Server で LEFT JOIN が INNER JOIN より速い場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。