ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 本地索引与全局索引

本地索引与全局索引

原创 Linux操作系统 作者:jack22220613 时间:2010-05-20 22:32:14 0 删除 编辑

版本: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博客 ” ,链接:https://blog.itpub.net/10037372/viewspace-663276/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle分析函数
请登录后发表评论 登录
全部评论

注册时间:2009-05-13

  • 博文量
    94
  • 访问量
    385657