Teradata JOIN策略

2018-01-12 15:30 更新

本章討論Teradata中可用的各種JOIN策略。

加入方法

Teradata使用不同的連接方法來執(zhí)行連接操作。 一些常用的Join方法是 :
合并加入
嵌套連接
產(chǎn)品加盟
合并加入
當(dāng)連接基于等式條件時,發(fā)生合并連接方法。 合并連接要求連接行在同一AMP上。 行基于它們的行哈希連接。 合并連接使用不同的連接策略將行放到同一個AMP。

策略#1

如果連接列是相應(yīng)表的主索引,則連接行已在同一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); 

當(dāng)這兩個表在EmployeeNo列上連接時,不會發(fā)生重新分配,因?yàn)镋mployeeNo是正在連接的兩個表的主索引。

策略#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列上連接,那么這些行需要重新分布,因?yàn)镈epartmentNo是一個表中的主索引和另一個表中的非主索引。 在這種情況下,加入行可能不在同一個AMP上。 在這種情況下,Teradata可能會在DepartmentNo列重新分發(fā)employee表。

策略#3

對于上述Employee和Department表,如果Department表的大小較小,Teradata可能會復(fù)制所有AMP上的Department表。

嵌套連接

嵌套連接不使用所有AMP。 對于嵌套連接發(fā)生,其中一個條件應(yīng)該是一個表的唯一主索引上的相等,然后將此列連接到另一個表上的任何索引。

在這種情況下,系統(tǒng)將使用一個表的唯一主索引獲取一行,并使用該行哈希從其他表獲取匹配的記錄。 嵌套連接是所有Join方法中最有效的。

產(chǎn)品加盟

Product Join將來自一個表的每個限定行與來自其他表的每個限定行進(jìn)行比較。 產(chǎn)品加入可能由于以下某些因素而發(fā)生:

  • 缺少條件。
  • 連接條件不基于等式條件。
  • 表別名不正確。
  • 多連接條件。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號