選擇 MPP 資料庫中表格的雜湊分佈索引鍵

選擇有效的雜湊分佈索引鍵時,需要檢查表格定義以及任何針對表格發出的查詢。

開始之前

若要選擇有效的雜湊分佈索引鍵,您需要收集表格及表格使用方式的相關資訊:

  • 表格定義 - 主要索引鍵、唯一索引鍵、產生的直欄、直欄資料類型
  • 表格資料 - 相異值數目、值的分佈
  • 針對表格發出的查詢 - 結合、相等述詞

關於這項作業

在 MPP 資料庫中,叢集的所有節點中的系統資源(記憶體、儲存體及處理器這類資源)都會分割成稱為資料截塊 的邏輯單元。當您使用雜湊分佈時,資料庫管理程式會跨資料截塊分散表格列中的資料,方法是將雜湊演算法套用至分佈索引鍵直欄中的值。

有效的雜湊分佈索引鍵可以透過兩種不同的方式來改善查詢效能:

  • 將表格資料平均傳播到所有資料截塊

    平均分佈可產生數個好處:
    • 盡量提高查詢處理的平行化
    • 有效率地使用可用的儲存體空間
  • 並置從不同表格一併提取的列

    一併提取的列位於相同的資料截塊時,提取這些列所需的時間量會減少。

一般而言,設定平均分佈的優先順序高於列並置。

若為較小的表格,份佈索引鍵對查詢效能的影響較小。若為較大的表格,分佈索引鍵會大幅影響查詢效能。

程序

請考慮使用表格的所有直欄作為分佈索引鍵的候選項目,並根據下列四個準則來排除直欄或選擇直欄:
  1. 表格定義
    • 如果表格具有強制執行的主要索引鍵,則分佈索引鍵中的直欄必須是主要索引鍵中的直欄子集。
    • 如果表格具有強制執行的唯一索引鍵,則分佈索引鍵中的直欄必須是唯一索引鍵中的直欄子集。
    • 不考慮使用不支援作為分佈索引鍵的任何產生的直欄:
      • ROW CHANGE TIMESTAMP
      • ROW BEGIN
      • ROW END
      • TRANSACTION START ID
    • 不考慮使用具有分佈索引鍵不支援之資料類型的任何直欄:
      • Long(範例:long varchar、long vargraphic)
      • 大型物件(範例:BLOB、CLOB、DBCLOB)
      • XML
      • 根據 long、大型物件或 XML 資料類型的特殊類型
      • 結構化類型
  2. 表格資料
    • 選擇包含(或預期可能包含)許多特殊及平均分佈值的直欄。
    • 不考慮使用包含許多空值的直欄。
  3. 查詢
    • 若要並置從不同表格一併提取的列,請針對兩個表格考量下列因素:
      • 如果將表格包含在結合中,則請選擇查詢的結合述詞中所使用的直欄。
      • 如果在其中包含表格的查詢具有使用其他表格直欄的相等測試,則請選擇相等測試中所使用的直欄。
  4. 一般
    • 盡可能選擇最少的直欄,因為這會增加並置列(這些列是從不同的表格一併提取)的可能性。

範例

請考慮使用包含下列直欄的 EMPLOYEE 表格:

CREATE TABLE EMPLOYEE                    
(
  ID INT NOT NULL,
  NAME VARCHAR(250) NOT NULL,
  RESUME CLOB,
  HIRE_DATE DATE,
  IS_MANAGER CHAR(1),
  OFFICE_NUMBER INT
)
ORGANIZE BY ROW

其他資訊:

  • IS_MANAGER 直欄的值只能是 'Y' 或 'N'。
  • 經理需要對此表格及另一個表格(稱為 SALES)定期發出查詢,以產生每一位員工的總銷售報告:
    
    ... WHERE SALES.SALES_PERSON_ID = EMPLOYEE.ID ...
  • 公司成立只有 1 年,而且 50% 的員工都是在去年七月雇用。

您可以使用下列邏輯來選擇 EMPLOYEE 表格的雜湊分佈索引鍵:

表 1. 選擇 EMPLOYEE 表格的雜湊分佈索引鍵的邏輯. 此表格討論如何套用四個準則來選擇 EMPLOYEE 表格的雜湊分佈索引鍵。
準則 討論 直欄
表格定義
  • RESUME 直欄不能是分佈索引鍵的一部分,因為它的資料類型不受支援。

其餘的候選項目:

  • ID
  • NAME
  • HIRE_DATE
  • IS_MANAGER
  • OFFICE_NUMBER
表格資料
  • 因為 50% 的員工都是在去年七月雇用,所以 HIRE_DATE 中的值不會平均分佈到許多相異值。
  • IS_MANAGER 直欄中的值只能是 'Y' 或 'N',其不是許多相異值。

其餘的候選項目:

  • ID
  • NAME
  • OFFICE_NUMBER
查詢
  • 因為針對此表格發出的查詢會比較 ID 直欄中的值與來自另一個表格中直欄的值,所以 ID 直欄應該是分佈索引鍵的一部分。

建議:

  • ID

其餘的候選項目:

  • NAME
  • OFFICE_NUMBER
一般
  • 因為一般指引是盡可能包括最少的直欄,而且因為這裡沒有資訊指出分佈索引鍵中需要 OFFICE_NUMBER 直欄或 NAME 直欄,所以不會考慮使用這兩個直欄。

分佈索引鍵:( ID )