Teradata 分區(qū)主索引

2018-01-12 15:43 更新

分區(qū)主索引(PPI)是一種索引機(jī)制,可用于提高某些查詢的性能。 當(dāng)將行插入到表中時(shí),它們存儲(chǔ)在AMP中并按其行散列順序排列。 當(dāng)使用PPI定義表時(shí),行按其分區(qū)編號(hào)排序。 在每個(gè)分區(qū)中,它們按其行散列排列。 根據(jù)定義的分區(qū)表達(dá)式將行分配給分區(qū)。

優(yōu)點(diǎn)

避免對某些查詢進(jìn)行全表掃描。
避免使用需要額外物理結(jié)構(gòu)和額外I / O維護(hù)的輔助索引。
快速訪問大表的子集。
快速刪除舊數(shù)據(jù)并添加新數(shù)據(jù)。

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

編號(hào)訂單號(hào)訂購日期合計(jì)訂單
10175012015-10-01900
10175022015-10-021,200
10275032015-10-023,000
10275042015-10-032,454
10175052015-10-031201
10375062015-10-042,454
10175072015-10-051201
10175082015-10-051201

假設(shè)記錄分布在AMP之間,如下表所示。 記錄存儲(chǔ)在AMP中,基于它們的行哈希排序。

AMP 1
RowHash訂單號(hào)訂購日期
175052015-10-03
275042015-10-03
375012015-10-01
475082015-10-05

AMP 2
RowHash訂單號(hào)訂購日期
175072015-10-05
275022015-10-02
375062015-10-04
475032015-10-02

如果運(yùn)行查詢以提取特定日期的訂單,則優(yōu)化程序可以選擇使用全表掃描,然后可以訪問AMP中的所有記錄。 為了避免這種情況,您可以將訂單日期定義為分區(qū)主索引。 將行插入到訂單表中時(shí),它們按訂單日期進(jìn)行分區(qū)。 在每個(gè)分區(qū)中,它們將按其行哈希排序。
以下數(shù)據(jù)顯示如果記錄按訂單日期分區(qū),則記錄將如何存儲(chǔ)在AMP中。 如果運(yùn)行查詢以按訂單日期訪問記錄,則只會(huì)訪問包含該特定訂單的記錄的分區(qū)。

AMP 1
劃分RowHash訂單號(hào)訂購日期
0375012015-10-01
1175052015-10-03
1275042015-10-03
2475082015-10-05

AMP 2
劃分RowHash訂單號(hào)訂購日期
0275022015-10-02
0475032015-10-02
1375062015-10-04
2175072015-10-05

以下是創(chuàng)建具有分區(qū)primary Index的表的示例。 PARTITION BY子句用于定義分區(qū)。

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列分區(qū)。 每天將有一個(gè)單獨(dú)的分區(qū)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)