Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239608
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Mysql/postgreSQL

2013-04-25 10:46:43

从本节开始,介绍索引分区的操作~~

1、增加索引分区(Adding Index Partitions)

从语法上来讲,增加索引分区与增加表分区没有什么实际性差别,将table换成index即可:

Alter index idxname add partition ptname tbs_clause;

需要注意一点add partition只能用于hash的global索引(如果你想为range类型的索引增加分区,不要用add,split也许能帮你实际你的需求),并且add partition无法新增local索引分区,因为local分区是由索引所在基表来维护的。

下面举个操作的例子,还记的我们前面演示创建hash分区的时候创建的索引吗,这里就以它为例吧:

JSSWEB> select partition_name,tablespace_name from user_ind_partitions

  2  where index_name='IDX_PART_HASH_ID';

PARTITION_NAME                 TABLESPACE_NAME

------------------------------ ------------------------------

SYS_P113                       TBSPART01

SYS_P114                       TBSPART02

SYS_P115                       TBSPART03

JSSWEB> alter index idx_part_hash_id add partition i_hash_id_p4 tablespace tbspart04;

索引已更改。

JSSWEB> select partition_name,tablespace_name from user_ind_partitions

  2  where index_name='IDX_PART_HASH_ID';

PARTITION_NAME                 TABLESPACE_NAME

------------------------------ ------------------------------

I_HASH_ID_P4                   TBSPART04

SYS_P113                       TBSPART01

SYS_P114                       TBSPART02

SYS_P115                       TBSPART03

看看,就是这么简单。

2、删除索引分区(Dropping Index Partitions)

Drop partition只能操作global索引的range分区,语法也很简单:

Alter index idxname drop partition ptname;

看起来很简单对吧,但是,需要注意,索引必须拥有一个maxvalue的分区,该分区无法删除。

另外,如果删除的索引分区中包含数据,分区被删除后,会造成相邻的higher分区失效,需要手工编译!这个其实很容易理解,索引中数据都是经过排序的,我们drop partition删除的只是分区,但其对应的索引数据还需要有地儿存在行啊(不然索引启不就不准确了),于是就只好存储到比它更高区间值的索引区分里去了,那个分区莫名其妙多了数据,自然状态就为不可用了。

举个例子:

JSSWEB> select partition_name,high_value,tablespace_name,status from user_ind_partitions

  2  where index_name='IDX_PART_RANGE_ID';

PARTITION_NAME       HIGH_VALUE      TABLESPACE_NAME      STATUS

-------------------- --------------- -------------------- --------

I_RANGE_P1           10              TBSPART01            USABLE

I_RANGE_P2           40              TBSPART02            USABLE

I_RANGE_PMAX         MAXVALUE        TBSPART03            USABLE

向表中插入几条记录:

JSSWEB> insert into t_partition_range values (8,'a');

已创建 1 行。

JSSWEB> insert into t_partition_range values (9,'b');

已创建 1 行。

JSSWEB> commit;

提交完成。

执行删除操作

JSSWEB> alter index idx_part_range_id drop partition i_range_p1;

索引已更改。

JSSWEB> select partition_name,high_value,tablespace_name,status from user_ind_partitions

  2  where index_name='IDX_PART_RANGE_ID';

PARTITION_NAME       HIGH_VALUE      TABLESPACE_NAME      STATUS

-------------------- --------------- -------------------- --------

I_RANGE_P2           40              TBSPART02            UNUSABLE

I_RANGE_PMAX         MAXVALUE        TBSPART03            USABLE

于是,i_range_p2分区就unusable了,继续往下看吧,后面要讲如何重编译索引分区了。

阅读(834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~