低速パス ローカル入れ子結合プロセス
低速パス入れ子結合アルゴリズムにより適用されるプロセスは、以下のとおりです。
- 左のテーブルから各行を読み取ります。
- 左のテーブルの各行を右のテーブルのインデックス値と比較して評価します。
- 右のテーブルの一致するインデックス項目に対応するインデックス行を、右のテーブルで検索します。
- 対応する右のテーブルのインデックス行から、左のテーブルの行と結合する右のテーブルの行の行IDを検索します。
- 検索した行IDを使用して、右のテーブルのデータ行を読み取ります。
- 結合行を作成します。
- 左のテーブルの行と右のテーブルの行IDを使用して、最終結合を作成します。
次の図は、一般的な低速パス ローカル入れ子結合プロセスを表わしています。
次の例は、低速パス ローカル入れ子結合を使って処理される問合わせです。
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処理については、次の図で説明します。
次の例は、employeeテーブルとdepartmentテーブルで低速パス入れ子結合を使用して処理されるクエリーを示します。
SELECT employee.name, department.name FROM employee, department WHERE employee.enum = 5 AND employee.dept = department.dept;
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です。
dept | dept_name |
---|---|
400 | Education |
150 | Payroll |
200 | Finance |
310 | Mfg |
列deptは、テーブルのUPIとPKです。