📜  Teradata-加入策略

📅  最后修改于: 2020-11-29 09:07:11             🧑  作者: Mango


本章讨论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是要联接的两个表的主索引,所以不会进行重新分配。

策略二

考虑以下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。为了进行嵌套连接,条件之一应该是在一个表的唯一主索引上相等,然后将该列连接到另一表的任何索引上。

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

产品加盟

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

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