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 條件。
  • 連線條件不是基於相等條件。
  • 表別名不正確。
  • 多個連線條件。
廣告

© . All rights reserved.