codecamp

Teradata 分区主索引

分区主索引(PPI)是一种索引机制,可用于提高某些查询的性能。 当将行插入到表中时,它们存储在AMP中并按其行散列顺序排列。 当使用PPI定义表时,行按其分区编号排序。 在每个分区中,它们按其行散列排列。 根据定义的分区表达式将行分配给分区。

优点

避免对某些查询进行全表扫描。
避免使用需要额外物理结构和额外I / O维护的辅助索引。
快速访问大表的子集。
快速删除旧数据并添加新数据。

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

编号订单号订购日期合计订单
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

假设记录分布在AMP之间,如下表所示。 记录存储在AMP中,基于它们的行哈希排序。

AMP 1
RowHash订单号订购日期
175052015-10-03
275042015-10-03
375012015-10-01
475082015-10-05

AMP 2
RowHash订单号订购日期
175072015-10-05
275022015-10-02
375062015-10-04
475032015-10-02

如果运行查询以提取特定日期的订单,则优化程序可以选择使用全表扫描,然后可以访问AMP中的所有记录。 为了避免这种情况,您可以将订单日期定义为分区主索引。 将行插入到订单表中时,它们按订单日期进行分区。 在每个分区中,它们将按其行哈希排序。
以下数据显示如果记录按订单日期分区,则记录将如何存储在AMP中。 如果运行查询以按订单日期访问记录,则只会访问包含该特定订单的记录的分区。

AMP 1
划分RowHash订单号订购日期
0375012015-10-01
1175052015-10-03
1275042015-10-03
2475082015-10-05

AMP 2
划分RowHash订单号订购日期
0275022015-10-02
0475032015-10-02
1375062015-10-04
2175072015-10-05

以下是创建具有分区primary Index的表的示例。 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列分区。 每天将有一个单独的分区。

Teradata JOIN策略
Teradata OLAP函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }