Teradata - 加入策略


本章讨论 Teradata 中可用的各种 JOIN 策略。

连接方法

Teradata 使用不同的联接方法来执行联接操作。一些常用的连接方法是 -

  • 合并连接
  • 嵌套连接
  • 产品加入

合并连接

当连接基于相等条件时,会发生合并连接方法。合并联接要求联接行位于同一 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 列上重新分配员工表。

策略#3

对于上述 Employee 和 Department 表,如果 Department 表的大小较小,Teradata 可能会在所有 AMP 上复制 Department 表。

嵌套连接

嵌套连接并不使用所有 AMP。要进行嵌套联接,条件之一应该是一个表的唯一主索引相等,然后将此列联接到另一个表上的任何索引。

在这种情况下,系统将使用一个表的唯一主索引获取一行,并使用该行哈希从其他表中获取匹配的记录。嵌套连接是所有连接方法中最有效的。

产品加入

产品联接将一个表中的每个合格行与另一表中的每个合格行进行比较。产品加入可能会由于以下一些因素而发生 -

  • 哪里缺少条件。
  • 连接条件不基于相等条件。
  • 表别名不正确。
  • 多个连接条件。