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 将一个表中的每个合格行与另一个表中的每个合格行进行比较。由于以下一些因素,可能会发生产品加入:

  • 缺少条件的地方。
  • 加入条件不是基于相等条件。
  • 表别名不正确。
  • 多个连接条件。