分享

Oracle分区表及分区索引-创建list分区

 mac_tom 2009-07-10
创建list分区的语法如上,需要我们指定的:
l  column: 分区依赖列(注意:只能是一个);
l  partition:分区名称;
l  literal:    分区对应值(注意:每个分区可以对应多个值);
l tablespace_clause:  分区的存储属性,例如所在表空间等属性(可为空),默认继承基表所在表空间的属性。
*************************************
创建list分区表示例:
JSSWEB> create table t_partition_list (id number,name varchar2(50))
partition by list(id)(
partition t_list_p1 values (1,2,3,4,5,6,7,8,9) tablespace tbspart01,
   partition t_list_p2 values (10,11,12,13,14,15,16,17,18,19) tablespace tbspart02,
      partition t_list_p3 values (20,21,22,23,24,25,26,27,28,29) tablespace tbspart03,
         partition t_list_pd values (default) tablespace tbspart04);
表已创建。
上例能够实现与前面range分区示例相同的效果,当然针对本示例而言,list分区显然不好用啊~~~
***********************************
对于分区表的操作很多,其中某些操作仅针对某些分区有效,
哪个操作适用于哪种分区格式具体可以先参考下面这个表格:
-----------------------

分区表 Range List Hash Range-Hash Range-List 是否带来IO操作
增加分区(addpartition) 支持 支持 支持 支持 支持 除hash类型外,均不变带来大量IO
收缩分区(coalescepartitions) / / 支持 分区:/子分区:支持 /
删除分区(droppartition) 支持 支持 / 分区:支持子分区:/ 支持
交换分区(exchangepartition) 支持 支持 支持 支持 支持
合并分区(mergepartition) 支持 支持 / 分区:支持子分区:/ 支持
修改默认属性(modifydefaultattributes) 支持 支持 支持 支持 支持
修改分区当前属性(modifypartition) 支持 支持 支持 支持 支持
List分区增加值(modifypartitionaddvalues) / 支持 / / 分区:/子分区:支持
List分区删除值(modifypartitiondropvalues) / 支持 / / 分区:/子分区:支持 单纯删除操作无,但可能为了实现成功删除,之前的准备操作会带来一定量的IO
修改子分区模板(setsubpartitiontemplate) / / / 支持 支持
移动分区(movepartition) 支持 支持 支持 分区:支持子分区:/ 分区:支持子分区:/
重命名分区(renamepartition) 支持 支持 支持 支持 支持
分隔分区(splitpartition) 支持 支持 / 分区:支持子分区:/ 支持
截断分区(truncatepartition) 支持 支持 支持 支持 支持

  注:上述IO列的评估建立在假设分区中均存在一定量数据,并忽略修改数据字典可能触发的IO,忽略造成的索引的重编译带来的IO。

  分区索引的操作也有一张表黑黑,如下

分区索引 索引类型 Range List Hash 组合分区 是否带来IO操作

  增加分区

  (addpartition)

全局 / / 支持 /
本地 / / / /

  删除分区

  (droppartition)

全局 支持 / / /
本地 / / / /

  修改默认属性

  (modifydefaultattributes)

全局 支持 / / /
本地 支持 支持 支持 支持

  修改分区当前属性

  (modifypartition)

全局 支持 / / /
本地 支持 支持 支持 支持

  重编译分区

  (rebuildpartition)

全局 支持 / / /
本地 支持 支持 支持 支持

  重命名分区

  (renamepartition)

全局 支持 / / /
本地 支持 支持 支持 支持

  分隔分区

  (splitpartition)

全局 支持 / / /
本地 / / / /

  另外local索引前头我们多次提到了,其维护会在oracle操作表分区的时候自动进行,需要注意的是global索引,当global索引所在表执行alter table涉及下列操作时,会导至该索引失效:

  Ø ADD PARTITION | SUBPARTITION

  Ø COALESCE PARTITION | SUBPARTITION

  Ø DROP PARTITION | SUBPARTITION

  Ø EXCHANGE PARTITION | SUBPARTITION

  Ø MERGE PARTITION | SUBPARTITION

  Ø MOVE PARTITION | SUBPARTITION

  Ø SPLIT PARTITION | SUBPARTITION

  Ø TRUNCATE PARTITION | SUBPARTITION

  因此,建议用户在执行上述操作sql语句后附加update indexes子句,oracle即会自动维护全局索引,当然,需要注意这中间有一个平衡,你要平衡操作ddl的时间和重建索引哪个时间更少,以决定是否需要附加update indexes子句。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多