分区索引

2.11.7  分区索引

分区索引就是简单地把一个索引分成多个片段。通过把索引分成多个物理片段,可以访问更小的片段(也更快),并且可以把这些片段分别存放在不同的磁盘驱动器上(避免I/O竞争)。B树索引和位图索引都可以被分区,而哈希索引不可以被分区。可以有好几种分区方法:表分区而索引未分区;表未分区而索引分区;表和索引都分区。不管采用哪种方法,都必须使用基于成本的优化器。分区从多方面使改善性能和提高可维护性成为可能。

有两种类型的分区索引:本地索引和全局索引。每个类型都有两个子类型,有前缀索引和无前缀索引。一个表可以在它的列上建立任意数量的各种类型(组合)的索引。如果使用了位图索引,就必须是本地索引。对索引分区最主要的原因是可以减少所需读取的索引的大小,另外把分区放在不同的表空间中可以提高分区的可用性和可靠性。

Oracle还支持在分区的表和索引上的并行查询和并行DML(在第11章中有更详细的内容)。这样就可以同时执行多个进程,从而加快处理这条语句的速度。

1. 本地索引(通常使用的索引)

本地索引是与表使用相同的分区键和范围界限的索引。本地索引的每个分区只包含了它所对应的表分区中的键值和ROWID。本地索引可以是B树索引或位图索引。如果是B树索引,它可以是唯一或不唯一的索引。

这种类型的索引支持分区独立性,这就意味着对于单独的分区,在不用删除或重建索引的情况下可以进行添加、截断、删除、分割、脱机等处理。Oracle自动维护这些本地索引。本地索引分区还可以被单独重建,而其他分区不会受到影响。

有前缀的索引

有前缀的索引是指包含了分区键并把它们作为索引的前导列的索引。例如,让我们再次回顾participant表。在创建该表后,使用survey_id和survey_date这两个列进行范围分区,然后在survey_id列上建立一个有前缀的本地索引,如图2-6所示。这个索引的所有分区都被对等划分,也就是说,索引的分区都使用表的相同范围界限来创建。

要诀

本地的有前缀索引可以让Oracle快速剪裁一些不必要的分区。也就是说,没有包含在WHERE条件子句中的任何值的分区将不会被访问,这样也提高了语句的性能。

无前缀的索引

无前缀的索引是指没有把分区键的前导列作为索引的前导列的索引。如果使用有同样分区键(survey_id 和survey_date)的相同分区表participant,建立在survey_date 列上的索引就是本地的无前缀索引,如图2-7 所示。可以在表的任一列上创建本地无前缀索引,但索引的每个分区只包含表的相应分区的键值。

如果要把无前缀的索引设为唯一索引,这个索引就必须包含分区键的子集。在这个例子中,您需要对包含survey_date和(或)survey_id的列进行组合(只要survey_id不是索引的第一列即可,否则它就是有前缀的索引)。

要诀

对于唯一的无前缀索引,它必须包含分区键的子集。

2. 全局索引

全局分区索引在一个索引分区中包含来自多个表分区的键值。一个全局分区索引的分区键是与分区表中分区键不同的列或不同的范围。在创建全局分区索引时,必须定义分区键的范围和值。全局索引只能是B树索引。Oracle在默认情况下不会维护全局索引。在对分区进行截断、添加、分割、删除等表修改操作的时候,如果没有指定ALTER TABLE命令的UPDATE GLOBAL INDEXES子句,就必须重建全局分区索引。

有前缀的索引

通常,全局有前缀索引没有与底层表相应的对等分区。全局有前缀索引可以使用与底层表相应的对等分区,但Oracle 在生成查询计划或执行分区维护操作时,并不会充分利用对等分区带来的好处。如果索引被对等分区,就应该把它创建为本地索引,这样Oracle 可以维护这个索引,并使用它来剪裁不必要的分区,如图2-8所示。在该图的3个索引分区中,每个分区都包含指向多个表分区中行的索引条目。

要诀

如果一个全局索引将被对等分区,就应该把它创建为一个本地索引,这样Oracle就可以维护这个索引,并使用它来剪裁或排除查询中不需要的分区。

无前缀的索引

Oracle不支持无前缀的全局索引。它们与在相同列上的B树索引相比,没有任何优势,所以没有必要支持。
 

http://book.51cto.com/art/201312/425507.htm

http://book.51cto.com/art/201312/425121.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值