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