リモート入れ子結合 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/uqf1592445067244.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

リモート入れ子結合の定義

リモート入れ子結合は、WHERE条件が1つのテーブルの固有インデックスに定数値を指定する場合に使用され、その条件は、単一行のある列を、第2のテーブルのプライマリ インデックスまたはセカンダリ インデックスに照合します。

「リモート入れ子結合」というテーブル現は、右のテーブルから行を取得するためにメッセージが別のAMPに送信されることを示唆しています。

リモート入れ子結合では、いつでもすべてのAMPを使用するとは限りません。このため、この結合は、システム リソースの点からもっとも効率がよく、たいていの場合はOLTPアプリケーションにもっとも適しています。

リモート入れ子結合では、通常、大量のデータのコピーや再分散を避け、結合処理に関係するAMPの数を最少にします。

次のSELECTリクエストの例は、2つのテーブルの間に結合条件が存在しない、リモート入れ子結合です。

SELECT *
FROM table_1, table_2
WHERE table_1.USI_1
AND   table_2.USI_2 = 1;

そのように結合条件が存在しない場合、リモート入れ子結合を使用するときには、副次(右の)テーブルのインデックスを例1、2、3で示された定数で定義しなければなりません。

リモート入れ子結合のプロセス

リモート入れ子結合は、あるテーブルに結合するテーブルのキーが含まれている場合に使用されます。キーは、次のいずれかのデータベースのオブジェクトを持ちます。
  • 固有プライマリ インデックス(UPI)
  • 非固有プライマリ インデックス(NUPI)
  • 固有セカンダリ インデックス(USI)
  • 非固有セカンダリ インデックス(NUSI)
  • あるインデックスと一致する非インデックス付き列
そのような結合条件が存在しており、第1のテーブルの条件が第2のテーブルのプライマリまたはセカンダリ インデックスの列と一致する場合、以下のプロセスが行なわれます。
  1. 第1のテーブルから条件に合う単一行を検索します。
  2. 行ハッシュ値を使用して第2のテーブルに一致する行があるAMPを見つけて、結合します。

次の図は、リモート入れ子結合プロセスを表わしています。


Layer_1 工作表.1 工作表.2 工作表.3 工作表.4 工作表.5 工作表.6 工作表.7 工作表.8 工作表.9 工作表.10 工作表.11 工作表.12 工作表.13 工作表.14 工作表.15 工作表.16 工作表.17 工作表.18 工作表.19 工作表.20 工作表.21 工作表.22 工作表.23 工作表.24 工作表.25 工作表.26 工作表.27 工作表.28 工作表.29 工作表.30 工作表.31 工作表.32 工作表.33 工作表.34 工作表.35 工作表.36 工作表.37 工作表.38 工作表.39 工作表.40

リモート入れ子結合条件の例

リモート入れ子結合は、2つのテーブルのプライマリ インデックスと他の条件の間に等式条件がない場合に使用できます。このことを次の例の条件で示します。

  (table_1.UPI = constant OR table_1.USI = constant)
   AND (table_2.UPI = constant OR table_2.USI = constant)

この場合、適切な結合条件があってもなくてもかまいません。

次の2つの例では、適切な結合条件が存在する場合を示しています。

   (table_1.UPI = constant OR table_1.USI = constant)
   AND ((table_2.NUPI = table_1.field)
   OR (table_2.USI = table_1.field))

  (table_1.NUPI = constant)
   AND (table_2.UPI = table_1.field)
   AND (few_rows_returned_from_the_table_1.NUPI = constant)