マージ結合について

マージ結合では、両方の入力がマージ列を基準に並べ替えられていることが必要です。マージ列は、結合述語の等値 (ON) 句によって定義されます。通常、インデックスが対応する 1 組の列に対して存在する場合、クエリ オプティマイザはインデックスをスキャンします。または、マージ結合の下に並べ替え操作が配置されます。まれに、複数の等値句が存在することもありますが、マージ列は利用できる等値句の一部からしか取られません。

各入力が並べ替えられるので、Merge Join 操作は各入力から 1 行ずつ取得して、それらを比較します。たとえば、Inner Join 操作では、行が等しい場合、それらの行が返されます。行が等しくない場合は、小さい方の値が含まれる行が破棄され、その入力から別の行が取得されます。すべての行が処理されるまで、この処理は続きます。

Merge Join 操作は、標準の操作または多対多操作のいずれかになります。多対多のマージ結合では、行を格納するために一時テーブルが使用されます。各入力に重複する値がある場合、一方の入力の各重複値が処理されるとき、他方の入力は重複値の先頭に戻る必要があります。

残余述語がある場合、マージ述語に適合するすべての行は残余述語を評価し、残余述語に適合する行だけが返されます。

マージ結合自体は非常に高速ですが、並べ替え操作が必要な場合、時間がかかることがあります。ただし、データ量が多く、必要なデータを既存の B ツリー インデックスからあらかじめ並べ替えられた形で取得できる場合、多くの場合、利用可能な結合アルゴリズムの中でマージ結合が最も高速になります。