排他マージ結合のプロセス
- 左右のテーブルが分散され、結合列の行ハッシュ値に基づいてソートされます。
- 左のテーブルの行ごとに、結合条件に一致する行ハッシュ値が見つかるまで、右のテーブルの同じ値を持つすべての行を読み取ります。
- 結合結果を作成します。
右のテーブルの一致する行が見つからない場合、左の行に戻ります。
排他マージ結合の例
次のSELECTリクエストは、最適化ルーチンが結合計画に排他マージ結合を使用する場合の例です。
SELECT name FROM employee WHERE dept_no NOT IN (SELECT dept_no FROM department WHERE loc <> ‘CHI’);
以下のステップは、排他結合プロセスの具体的な例です。
- loc <> ' CHI 'であるdepartment行が、すべてのAMPで探索されます。
- この条件、department 600を満たす複数の行が見つかると、同じAMPのスプールに入れられます。
- 単一のdepartment行が入っているスプールが再分散されます。
- 各AMPで、2つのスプール内の行が排他マージ結合されます。
- 各AMPで、600以外のdept_noを持ったemployee行のName情報が結果スプールに入れられます。
最後のAMPがその結合の部分を完了したときに、すべての結果スプールの内容がBYNETマージによってユーザーに送られます。
排他マージ結合の処理ステップは、次の点を除いて、排他プロダクト ジョインに使用される手順に類似しています(排他結合を参照)。
- ステップ2で複数の行が検索されます。
- 排他マージ結合では、ステップ2と4が組み合わせされ、コピーの代わりに再分散が行なわれます。
- ステップ3は除去されます。
- ステップ5は、排他プロダクト ジョインに変更されます。
次のemployeeテーブルとcustomerテーブルを使用して、後続の排他マージ結合の例について考えてみましょう。
e_num | Name | job_code |
---|---|---|
1 | Brown | 512101 |
2 | Smith | 412101 |
3 | Jones | 512101 |
4 | Clay | 412101 |
5 | Peters | 512101 |
6 | Foster | 512101 |
7 | Gray | 413201 |
8 | Baker | 512101 |
列e_numはUPIとPKで、job_codeはFKです。
cust | sales_enum |
---|---|
23 | 6 |
24 | 3 |
25 | 8 |
26 | 1 |
27 | 6 |
28 | 8 |
29 | 1 |
30 | 6 |
列custはUPIとPKで、sales_enumはFKです。
以下の図は、次のSELECTリクエストで発生する行の再配置についての説明です。
SELECT name FROM employee WHERE job_code = 512101 AND e_num NOT IN (SELECT sales_enum FROM customer);