Teradata - 分割槽主索引



分割槽主索引 (PPI) 是一種索引機制,可用於提高某些查詢的效能。當行插入到表中時,它們儲存在 AMP 中,並按其行雜湊順序排列。當表使用 PPI 定義時,行按其分割槽號排序。在每個分割槽內,它們按其行雜湊排列。行根據定義的分割槽表示式分配到分割槽。

優勢

  • 避免對某些查詢進行全表掃描。

  • 避免使用需要額外物理結構和額外 I/O 維護的二級索引。

  • 快速訪問大型表的子集。

  • 快速刪除舊資料並新增新資料。

示例

考慮以下具有 OrderNo 主索引的 Orders 表。

門店編號 訂單號 訂單日期 訂單總額
101 7501 2015-10-01 900
101 7502 2015-10-02 1,200
102 7503 2015-10-02 3,000
102 7504 2015-10-03 2,454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2,454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

假設記錄在 AMP 之間分佈,如下表所示。記錄儲存在 AMP 中,根據其行雜湊排序。

AMP 1

行雜湊 訂單號 訂單日期
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

行雜湊 訂單號 訂單日期
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

如果您執行查詢以提取特定日期的訂單,則最佳化器可能會選擇使用全表掃描,然後可以訪問 AMP 中的所有記錄。為避免這種情況,您可以將訂單日期定義為分割槽主索引。當行插入到 orders 表中時,它們按訂單日期進行分割槽。在每個分割槽內,它們將按其行雜湊排序。

以下資料顯示如果按訂單日期進行分割槽,記錄將如何儲存在 AMP 中。如果執行查詢以按訂單日期訪問記錄,則將只訪問包含該特定訂單記錄的分割槽。

AMP 1

分割槽 行雜湊 訂單號 訂單日期
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

分割槽 行雜湊 訂單號 訂單日期
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

以下是如何建立具有分割槽主索引的表的示例。使用 PARTITION BY 子句定義分割槽。

CREATE SET TABLE Orders (
   StoreNo SMALLINT, 
   OrderNo INTEGER, 
   OrderDate DATE FORMAT 'YYYY-MM-DD', 
   OrderTotal INTEGER 
) 
PRIMARY INDEX(OrderNo) 
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

在上述示例中,表按 OrderDate 列進行分割槽。每天將有一個單獨的分割槽。

廣告
© . All rights reserved.