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);
当这两个表在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列重新分发employee表。
策略#3
对于上述Employee和Department表,如果Department表的大小较小,Teradata可能会复制所有AMP上的Department表。
嵌套连接
嵌套连接不使用所有AMP。 对于嵌套连接发生,其中一个条件应该是一个表的唯一主索引上的相等,然后将此列连接到另一个表上的任何索引。
在这种情况下,系统将使用一个表的唯一主索引获取一行,并使用该行哈希从其他表获取匹配的记录。 嵌套连接是所有Join方法中最有效的。
产品加盟
Product Join将来自一个表的每个限定行与来自其他表的每个限定行进行比较。 产品加入可能由于以下某些因素而发生:
- 缺少条件。
- 连接条件不基于等式条件。
- 表别名不正确。
- 多连接条件。