版本: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/