ホームページ > データベース > mysql チュートリアル > SQL Server で LEFT JOIN が INNER JOIN より速い場合があるのはなぜですか?

SQL Server で LEFT JOIN が INNER JOIN より速い場合があるのはなぜですか?

Linda Hamilton
リリース: 2025-01-18 16:37:10
オリジナル
874 人が閲覧しました

Why Are My LEFT JOINs Sometimes Faster Than INNER JOINs in SQL Server?

SQL Server の結合パフォーマンス: LEFT JOIN の誤解を暴く

SQL Server の結合パフォーマンスに関してよくある誤解が存在​​します。それは、LEFT JOIN 操作は本質的に INNER JOIN 操作よりも高速であるということです。 これは一般に不正確です。 LEFT JOIN は、INNER JOIN のすべての作業を実行してから、適切なテーブル内の一致しないエントリに対して NULL 値を持つ行を追加する必要があるため、余分な処理オーバーヘッドが生じます。 結果セットが大きくなることも、実行時間の増加につながります。

あなたの LEFT JOIN の方が速かったかもしれない理由

LEFT JOIN クエリの速度が速くなった場合、その理由はおそらく結合タイプ自体に関係のない要因に起因すると考えられます。

  • インデックスが不十分です: 候補キーと外部キーに適切なインデックスがないことは、特に多数のテーブル (たとえば、十分なインデックスがない 9 つのテーブル) を結合する場合に、パフォーマンスの大きなボトルネックになります。
  • 小さなテーブル サイズ: 結合に含まれる小さなテーブルに含まれる行が非常に少ない場合、LEFT JOIN のオーバーヘッドは、他のクエリ操作に費やされる時間と比較して無視できる可能性があります。

LEFT JOIN が有利になる可能性があるとき

LEFT JOININNER 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 サイトの他の関連記事を参照してください。

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