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. 右のテーブルの一致するインデックス項目に対応するインデックス行を、右のテーブルで検索します。
  4. 対応する右のテーブルのインデックス行から、左のテーブルの行と結合する右のテーブルの行の行IDを検索します。
  5. 検索した行IDを使用して、右のテーブルのデータ行を読み取ります。
  6. 結合行を作成します。
  7. 左のテーブルの行と右のテーブルの行IDを使用して、最終結合を作成します。

次の図は、一般的な低速パス ローカル入れ子結合プロセスを表わしています。


低速パス ローカル入れ子結合プロセス(ステップ1~2)


低速パス ローカル入れ子結合プロセス(ステップ3)

次の例は、低速パス ローカル入れ子結合を使って処理される問合わせです。

department(部門)100の管理者がだれであるかを調べるために、次のような問合わせを入力したとします。

SELECT dept_name, name, yrs_exp
FROM employee, department
WHERE employee.emp_no = department.mgr_no
AND   department.dept_no = 100;

この問合わせを処理するために、最適化ルーチンは、固有プライマリ インデックス値であるdept_no=100を使用して、その値を含んだdepartment行の処理を担当しているAMPにアクセスします。また、その行の中のmgr_no値のハッシュ コードが計算されます。

このmgr_no値は、department 100を管理する従業員のemp_no (Employeeテーブルの固有プライマリ インデックス)の値と同じです。 したがって、mgr_no用に計算されるハッシュ コードも、それに相当するemp_no値のハッシュ コードと同じになります。

mgr_no用に計算されたこのハッシュ コードを使用して、それに相当するemp_noのハッシュ コードを含んだemployee行の処理を担当するAMPへのアクセスが行なわれます。

次に、その行の中のnameとyrs_expの情報が最初のAMPに送り返され、それらの情報とdepartment 100のdept_nameが結合されて、結果スプールに格納されます。これらの情報がユーザーに返されます。

この2つのAMP処理については、次の図で説明します。


2AMPプロセス

次の例は、employeeテーブルとdepartmentテーブルで低速パス入れ子結合を使用して処理されるクエリーを示します。

SELECT employee.name, department.name
FROM employee, department
WHERE employee.enum = 5
AND   employee.dept = department.dept;
Employeeテーブル
e_num e_name dept
1 Brown 200
2 Smith 310
3 Jones 310
4 Clay 400
5 Peters 150
6 Foster 400
7 Gray 310
8 Baker 310

列e_numは、テーブルのUPIとPKで、deptはFKです。

Departmentテーブル
dept dept_name
400 Education
150 Payroll
200 Finance
310 Mfg

列deptは、テーブルのUPIとPKです。