排他プロダクト ジョインのプロセス
- 左のテーブルの行ごとに、右のテーブルのすべての行をそれに結合できるものが見つかるまで最初から読み取ります。
- 結合結果を作成します。
右のテーブルの一致する行が見つからない場合、左の行に戻ります。
Teradata Databaseでは、8バイト パーティション化の排他プロダクト ジョインについて、動的行パーティション排除をサポートしていません。
排他プロダクト ジョインの例
次のリクエストは、シカゴに勤務していない従業員の名前を返します。
SELECT name FROM employee WHERE dept_no NOT IN (SELECT dept_no FROM department WHERE loc = ’CHI’);
Subquery が1行のみを返すため、最適化ルーチンは、次のプロセスを使用して結合計画に排他プロダクト ジョインを選択します。
- loc = ‘CHI’であるdepartment行が、すべてのAMPで探索されます。
- 1つのAMPだけが選択された場合、locがインデックスである場合には、全AMP検索は実行されません。
- 単一のdepartment行が含まれているスプールは、スプールされたemployee行のあるすべてのAMPにコピーされます。
- この条件、department 600を満たす単一の行が見つかると、ローカルAMPでスプールしないで、直ちにコピーされます。
- 各AMPで、2つのスプール内の行が排他プロダクト ジョインされます。
- 各AMPで、600以外のdept_noを持ったemployee行のName情報が結果スプールに入れられます。
- 最後のAMPが結合のその部分を完了したときに、すべての結果スプールの内容が、BYNETマージを経て、要求しているアプリケーションに送られます。
次の図は、このプロセスを示したものです。