Teradata 加入策略
本章讨论了 Teradata 中可用的各种 JOIN 策略。
加入方法
Teradata 使用不同的联接方法来执行联接操作。一些常用的 Join 方法是-
合并加入
嵌套连接
产品加入
合并加入
Merge Join 方法在连接基于相等条件时发生。合并联接要求联接行位于同一 AMP 上。行基于它们的行哈希连接。 Merge Join 使用不同的 join 策略将行带到同一个 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);
当这两个表在 EmployeeNo 列上连接时,不会发生重新分配,因为 EmployeeNo 是被连接的两个表的主索引。
策略 #2
考虑以下员工和部门表。
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 );
如果这两个表在 DeparmentNo 列上连接,则需要重新分配行,因为 DepartmentNo 在一个表中是主索引,在另一个表中是非主索引。在这种情况下,连接行可能不在同一个 AMP 上。在这种情况下,Teradata 可能会在 DepartmentNo 列上重新分配员工表。
策略 #3
对于上述员工和部门表,如果部门表的大小较小,Teradata 可能会在所有 AMP 上复制部门表。
嵌套连接
嵌套联接不使用所有 AMP。要进行嵌套连接,条件之一应该是在一个表的唯一主索引上相等,然后将此列连接到另一个表上的任何索引。
在这种情况下,系统将使用一个表的唯一主索引获取一行,并使用该行哈希从其他表中获取匹配的记录。嵌套连接是所有连接方法中最有效的。
产品加入
Product Join 将一个表中的每个符合条件的行与另一个表中的每个符合条件的行进行比较。由于以下一些因素,可能会发生产品加入-
缺少条件的地方。
加入条件不是基于相等条件。
表别名不正确。
多个加入条件。