Teradata-JOIN戦略
この章では、Teradataで使用可能なさまざまなJOIN戦略について説明します。
結合メソッド
Teradataは、さまざまな結合方法を使用して結合操作を実行します。一般的に使用されるJoinメソッドのいくつかは次のとおりです。
- マージ結合
- ネストされた結合
- 製品への参加
マージ結合
マージ結合メソッドは、結合が等式条件に基づいている場合に実行されます。マージ結合では、結合行が同じAMP上にある必要があります。行は、行ハッシュに基づいて結合されます。マージ結合は、異なる結合戦略を使用して、行を同じAMPに移動します。
戦略#1
結合列が対応するテーブルのプライマリインデックスである場合、結合行はすでに同じAMP上にあります。この場合、配布は必要ありません。
次の従業員と給与の表を検討してください。
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE Salary (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
UNIQUE PRIMARY INDEX(EmployeeNo);
これらの2つのテーブルがEmployeeNo列で結合されている場合、EmployeeNoは結合されている両方のテーブルのプライマリインデックスであるため、再配布は行われません。
戦略#2
次のEmployeeテーブルとDepartmentテーブルについて考えてみます。
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE DEPARTMENT,FALLBACK (
DepartmentNo BYTEINT,
DepartmentName CHAR(15)
)
UNIQUE PRIMARY INDEX ( DepartmentNo );
これらの2つのテーブルがDeparmentNo列で結合されている場合、DepartmentNoは1つのテーブルのプライマリインデックスであり、別のテーブルの非プライマリインデックスであるため、行を再配布する必要があります。このシナリオでは、行の結合が同じAMP上にない場合があります。このような場合、TeradataはDepartmentNo列のemployeeテーブルを再配布する場合があります。
戦略#3
上記のEmployeeテーブルとDepartmentテーブルの場合、Departmentテーブルのサイズが小さいと、TeradataはすべてのAMPでDepartmentテーブルを複製する可能性があります。
ネストされた結合
ネストされた結合は、すべてのAMPを使用するわけではありません。ネストされた結合を実行するには、条件の1つが、一方のテーブルの一意のプライマリインデックスで等しいことであり、次にこの列をもう一方のテーブルの任意のインデックスに結合する必要があります。
このシナリオでは、システムは1つのテーブルの一意のプライマリインデックスを使用して1つの行をフェッチし、その行ハッシュを使用して他のテーブルから一致するレコードをフェッチします。ネストされた結合は、すべての結合メソッドの中で最も効率的です。
製品への参加
製品結合は、1つのテーブルの各適格行を他のテーブルの各適格行と比較します。以下の要因により、製品の結合が発生する場合があります-
- 条件が欠落している場所。
- 結合条件は、等式条件に基づいていません。
- テーブルエイリアスが正しくありません。
- 複数の結合条件。