本地索引与全局索引

版本:10gR2

分区索引分为:本地索引(local index) 和  全局索引  (global index)。

本地索引分为:有前缀(prefix)的索引和无前缀(nonprefix)的索引。

全局索引目前只支持有前缀的索引。

注:B树索引和位图索引都可以分区,但是HASH索引不可以被分区。位图索引必须是本地索引。

1 )本地索引

本地索引是由ORACLE自动管理的,它分为有前缀的本地索引和无前缀的本地索引。前者就是包含了分区键,并且将其作为引导列的索引,而后者就是没有将分区键的前导列作为索引的前导列的索引。

create table t (id number,time date)
partition by RANGE (id)
(
partition p1 values less than (1000) ,
partition p2 values less than (2000) ,
partition p3 values less than (maxvalue)
);

SQL>create index ind_id_local on t(id) local;

Index dropped

id是分区键,这样就创建了一个有前缀的本地索引。

SQL>create index ind_time_local on t(time) local;

Index dropped

time不是分区键,这样就创建了一个无前缀的本地索引。

本地索引不能用 alter index xx rebuild; 

SQL> alter index ind_id_local rebuild;
 
alter index ind_id_local rebuild
 
ORA-14086: 不能将分区索引作为整体重建

而需要写上哪个分区,即alter index xx rebuild partition xx;

 
SQL> alter index ind_id_local rebuild partition p1;
 
Index altered

也可以从user_part_indexes视图中获得相应信息,查看ALIGNMENT列

记录:alter table xx truncate partition xx;截断单个分区

2) 全局索引:全局分区索引的分区机制与表的分区机制不一样,全局分区索引只能是B树索引,且oracle不会自动的维护全局分区索引,当我们在对表的分区做修改之后,例如truncate partition 或者drop partition ,如果执行修改的语句不加上update global indexes的话,那么索引将不可用。其实分区表中的全局索引与非分区表中的索引可以看做是一回事,在非分区表中怎么创建,这里也怎么创建,因为索引默认创建的时候,就是全局索引。

SQL> drop index ind_id_local  ;

Index dropped

SQL> create index ind_id_global on t(id) global;
Index created

SQL> alter table test drop partition p1;

Table altered

此时需要rebuild这个索引,这样才能生效。

分区索引的2个视图: dba_ind_partitions   和  dba_part_indexes  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10037372/viewspace-663276/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10037372/viewspace-663276/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值