分区索引介绍

分区索引用于索引分区表,Oracle提供了两种类型的分区表的索引:本地索引和全局索引。
本地索引基于基表的分区。如果该表按日期范围分为12个区,则本地索引也分布在12个区上。换名话说,在数据分区和索引分区之间存在一对一的对应关系。而全局索引和基表分区之间没有一对一关系-----全局索引和基表是分区独立的。
1.全局索引
分区表的全局索引可以分区也可以不分区。全局不分区索引类似于未分区的普通Oracle索引,使用普通的Create Index 语句就可以创建这些全局不分区索引。
Create Index idx_sales on sales(month)
global partition by range(month)
(
partition sales1 value less than (3)
partition sales2 value less than (6)
partition sales3 value less than (9)
partition sales4 value less than (maxvalue)
);

注意:全局分区索引的管理涉及重要的维护工作,当一个分区表有DDL活动时,其全局索引需要重建。如果基表中有DDL活动,与其相关联的全局索引都会被标记为无用。在默认情况下,分区表中的任何表维护操作都将使全局索引无效(标记为无用的)。
原因:假如为给新季度分区腾出空间,需要删除最旧的季度分区。当一个表的一个分区被删除时,因为该索引指向的某些数据不存在了,所以全局索引失效。为防止由于删除分区所引起的无效性,必须使用update global indexes 以及drop partition语句,如下:

alter table sales drop partition sales1 update global indexes;

如果未包括update global indexes,则整个全局索引是无效的。在增加,拼命,交换,合并、移动、分离或截断分区表时,也可以使用update global indexes 选项。也可以使用alter index ....rebuild重建索引,只是需要额外的维护成本。

当由于索引叶块较少而产生争用时,Oracle建议使用散列分区全局索引。
create index idx_hg on test(c1,c2,c3) global partition by hash(c1,c2)
(
partition p1 tablespace t1,
partition p2 tablespace t2,
partition p3 tablespace t3,
partition p4 tablespace t4,

);


2.本地索引
本地分区索引和表分区有一对一的对应关系,可以创建本地分区索引来匹配分区甚至子分区。数据库构造此索引与基表一起均匀分布。任何时候,修改基表分区时,索引分区将自动维护,这是使用本地分区索引的最大优点。当一个分区被删除可任何DDL活动发生在分区中时,Oracle将自动重建本地分区索引。
create index idx_no_sales on sales(sales_no) local tablespace t1;

可以使用SQL Access Advisor获得关于创建哪种索引的建议。还可以获得哪个索引不被使用,而正在等待被删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值