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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

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

  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);