排他マージ結合 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ykx1561500561173.ditamap
dita:ditavalPath
ja-JP/ykx1561500561173.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

排他マージ結合のプロセス

  1. 左右のテーブルが分散され、結合列の行ハッシュ値に基づいてソートされます。
  2. 左のテーブルの行ごとに、結合条件に一致する行ハッシュ値が見つかるまで、右のテーブルの同じ値を持つすべての行を読み取ります。
  3. 結合結果を作成します。

    右のテーブルの一致する行が見つからない場合、左の行に戻ります。

排他マージ結合の例

次のSELECTリクエストは、最適化ルーチンが結合計画に排他マージ結合を使用する場合の例です。

     SELECT name
     FROM employee
     WHERE dept_no NOT IN (SELECT dept_no
                           FROM department
                           WHERE loc <> ‘CHI’);

以下のステップは、排他結合プロセスの具体的な例です。

  1. loc <> ' CHI 'であるdepartment行が、すべてのAMPで探索されます。
  2. この条件、department 600を満たす複数の行が見つかると、同じAMPのスプールに入れられます。
  3. 単一のdepartment行が入っているスプールが再分散されます。
  4. 各AMPで、2つのスプール内の行が排他マージ結合されます。
  5. 各AMPで、600以外のdept_noを持ったemployee行のName情報が結果スプールに入れられます。

最後のAMPがその結合の部分を完了したときに、すべての結果スプールの内容がBYNETマージによってユーザーに送られます。

排他マージ結合の処理ステップは、次の点を除いて、排他プロダクト ジョインに使用される手順に類似しています(排他結合を参照)。

  • ステップ2で複数の行が検索されます。
  • 排他マージ結合では、ステップ2と4が組み合わせされ、コピーの代わりに再分散が行なわれます。
  • ステップ3は除去されます。
  • ステップ5は、排他プロダクト ジョインに変更されます。

次のemployeeテーブルとcustomerテーブルを使用して、後続の排他マージ結合の例について考えてみましょう。

Employeeテーブル
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です。

customerテーブル
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);