本章讨论Teradata中可用的各种JOIN策略.
加入方法
Teradata使用不同的连接方法来执行连接操作.一些常用的Join方法是 :
合并加入
嵌套加入
产品加入
合并加入
合并加入方法发生在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);
当这两个表在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列上重新分配employee表.
策略#3
对于上述Employee和Department表,Teradata可能会复制所有AMP的部门表,如果部门表的大小很小.
嵌套加入
嵌套加入不使用所有AMP.对于要发生的嵌套连接,其中一个条件应该是一个表的唯一主索引上的相等,然后将此列连接到另一个表上的任何索引.
在此场景中,系统将使用一个表的唯一主索引获取一行,并使用该行哈希从其他表中获取匹配的记录.嵌套连接是所有Join方法中效率最高的.
产品连接
产品连接将一个表中的每个符合条件的行与来自其他表的每个符合条件的行进行比较表.产品加入可能由于以下某些因素而导致减去;
缺少条件的地方.
加入条件不是基于相等条件.
表别名不正确.
多个连接条件.