Teradata - 连接策略



本章讨论了 Teradata 中可用的各种连接策略。

连接方法

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

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

嵌套连接

嵌套连接不使用所有 AMP。要进行嵌套连接,其中一个条件应为在一张表上的唯一主索引上的相等条件,然后将此列连接到另一张表上的任何索引。

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

笛卡尔积连接

笛卡尔积连接将一张表中的每个合格行与另一张表中的每个合格行进行比较。笛卡尔积连接可能会由于以下一些因素而发生:

  • 缺少 where 条件。
  • 连接条件不是基于相等条件。
  • 表别名不正确。
  • 多个连接条件。
广告