读书人

互换分区导致索引失效-global index篇

发布时间: 2012-09-27 11:11:17 作者: rapoo

交换分区导致索引失效-----global index篇

前文说到:交换分区导致索引失效-----local index,本次总结下:交换分区导致索引失效-----global index

?

测试环境:
10.1.0.2.0
Window server 2003

?

1.概念篇

?

交换分区:所谓的交换分区就是分区表和分区表之间,或者表与分区表之间的数据互相迁移。

global index:即全局分区索引,此索引的分区方式和完全不同于其所在表的分区方式,相当于对索引单独分区,完全不同于其所在表的分区机制,缺点:不易维护。 全局分区索引只按范围或者散列hash分区,本例中hash分区是10g以后才支持的,当然你可以指定其他的分区方式。

?

2.初始化脚本

test@ORCL>  create table t_partition (id number,name varchar2(50))  2        partition by range(id)(  3        partition p1 values less than (10) ,  4        partition p2 values less than (20) ,  5        partition p3 values less than (30) ,  6        partition pmax values less than (maxvalue)  7        );表已创建。test@ORCL>alter table t_partition add constraint pk_t_partition primary key (id);表已更改。test@ORCL>create index  idx_glb_par_id  2  on t_partition(name)  3  global  4  partition by hash(name)  5  (  6  partition p1_glb,  7  partition p2_glb,  8  partition p3_glb  9  );索引已创建。test@ORCL>  create table t_no_partition (id number,name varchar2(50));表已创建。test@ORCL>alter table t_no_partition add constraint pk_t_no_partition primary key (id);表已更改。test@ORCL>insert into t_no_partition values(11,'11');已创建 1 行。test@ORCL>insert into t_no_partition values(12,'ddd');已创建 1 行。test@ORCL>insert into t_no_partition values(13,'13dsa');已创建 1 行。test@ORCL>commit;提交完成。test@ORCL>select partition_name, status from user_ind_partitions;PARTITION_NAME                 STATUS------------------------------ --------P3_GLB                         USABLEP2_GLB                         USABLEP1_GLB                         USABLEtest@ORCL>select * from t_no_partition  2  ;        ID NAME---------- ------------------------------        11 11        12 ddd        13 13dsatest@ORCL>select * from t_partition;未选定行test@ORCL>alter table t_partition exchange partition p2  2  with table t_no_partition UPDATE INDEXES;表已更改。test@ORCL>select * from t_partition;        ID NAME---------- ------------------------------        11 11        12 ddd        13 13dsatest@ORCL>select * from t_no_partition  2  ;未选定行test@ORCL>select partition_name, status from user_ind_partitions;PARTITION_NAME                 STATUS------------------------------ --------P3_GLB                         USABLEP2_GLB                         USABLEP1_GLB                         USABLE

?

可见数据交换成功,而分区索引也没有失效,达到了预期的目的。

but,You cannot use UPDATE INDEXES for index-organized tables. Use UPDATE GLOBAL INDEXES instead

对于IOT,不能简单的使用UPDATE INDEXES,而用UPDATE GLOBAL INDEXES代替。

?

?

读书人网 >其他数据库

热点推荐