ハッシュ結合、マージ結合、ループ結合の違いは?


40

SQL Serverでは、結合ヒントを指定できます。

  • ハッシュ結合
  • MERGE JOIN
  • LOOPは、登録しよう

これら3つの結合ヒントの定義は何ですか?また、それぞれをいつ使用する必要がありますか?

回答:


37

MSDNの「高度なクエリチューニングの概念」のトピック:

SQL Serverは、次の3種類の結合操作を採用しています。

  • ネストされたループの結合

  • 結合する

  • ハッシュ結合

一方の結合入力が小さく(10行未満)、もう一方の結合入力がかなり大きく、その結合列にインデックスが付けられている場合、必要なI / Oと比較が最小限であるため、インデックスネストループ結合は最速の結合操作です。ネストされたループの詳細については、「ネストされたループの結合について」を参照してください。

2つの結合入力が小さくなくても、結合列で並べ替えられている場合(たとえば、並べ替えられたインデックスをスキャンして取得された場合)、マージ結合が最速の結合操作です。両方の結合入力が大きく、2つの入力のサイズが類似している場合、事前にソートしたマージ結合とハッシュ結合のパフォーマンスは類似しています。ただし、2つの入力サイズが大幅に異なる場合、ハッシュ結合操作ははるかに高速になることがよくあります。詳細については、マージ結合についてを参照してください。

ハッシュ結合は、ソートされていない大きなインデックスなしの入力を効率的に処理できます。

しかし、より基本的なトピックであるクエリチューニングから始めて、最後にクエリヒントの使用に進む必要があると思います。


5
同意して、結合ヒントを入力するのは最後の手段としてのみ残す必要があります(推定データが実際のデータと大きく異なる場合に役立つことがあります)。
アンドリュービッカートン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.