Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
分区表
 
    在大型应用中,数据表可能会非常巨大,为了使用户在大量数据读写、查询中速度更快,可使用分区技术。
 
    分区表就是把非常大的表分割成较小的片段(分区),在实际应用中在独立分区上操作各个部分,而对用户透明。
 
    分区表有5中类型:范围分区散列分区列表分区组合范围散列分区组合范围列表分区
 
 
    1、范围分区(range)
 
    对数据表中某个值的范围进行分区,格式如下:
 

    create table t1_trans

      (

        trans_id number ,

        item varchar2 ( 300 ),

        trans_date date ,

        trans_state varchar2 ( 10 )

       )

      partition by range (trans_id)

      (

        partition part_01 values less than ( 10000 ) tablespace wxq_tbs,

        partition part_02 values less than ( 30000 ) tablespace users,

        partition part_03 values less than ( maxvalue ) tablespace system

       );

 

    注:必须要从小到达,分类排列。不满足当前分区条件的,则被放入下一分区。

 

 

    2、散列分区(hash)

 

    散列分区是根据hash算法均匀分布在各个分区上,格式如下:

 

    create table t1_trans

      (

        trans_id number ,

        item varchar2 ( 300 ),

        trans_date date ,

        trans_state varchar2 ( 10 )

       )

      partition by hash (trans_id)

      (

        partition part_01 tablespace wxq_tbs,

        partition part_02 tablespace users,

        partition part_03 tablespace system

       );

 

 

    3、列表分区(list)

 

    列表分区用于对非数值的数据类型分类分区,要列举出来,值不能太多

 

    create table t1_trans

      (

        trans_id number ,

        item varchar2 ( 300 ),

        trans_date date ,

        trans_state varchar2 ( 10 )

       )

      partition by list (trans_state)

      (

        partition part_01 values ( ' 杭州 ' , ' 南京 ' ) tablespace wxq_tbs,

        partition part_02 values ( ' 上海 ' , ' 北京 ' ) tablespace users,

        partition part_02 values ( default ) tablespace system

       );

 

 

    4、组合范围散列分区

 

    在根据范围分区之后,还要对每个分区的数据散列分布在几个表空间中

 

    createtable t1_trans

      (

        trans_id number,

        item varchar2(300),

        trans_date date,

        trans_state varchar2(10)

       )

      partitionbyrange (trans_date)

      subpartitionbyhash (trans_id)

      subpartitions3storein (wxq_tbs,users,system)

      (

        partition part_01 valueslessthan(date'2008-01-01'),

        partition part_02 valueslessthan(date'2009-01-01'),

        partition part_03 valueslessthan(maxvalue)

       );

 

    注:使用hash是为了使数据分散到各个tablespace,使用range是为了查询、操作时分开part_01,功能不同!

 

 

    5、组合范围列表分区

 

    先对范围分区,然后根据列表值再分区,可以交叉tablespace

 

    createtable t1_trans

      (

        trans_id number,

        item varchar2(300),

        trans_date date,

        trans_state varchar2(10)

       )

      partitionbyrange (trans_id)

      subpartitionbylist (trans_state)

      ( partition part_01 valueslessthan(10000)

         (subpartition part_01_1 values ('杭州','南京') tablespace wxq_tbs,

          subpartition part_01_2 values (default) tablespace users ),

        partition part_02 valueslessthan(maxvalue)

         (subpartition part_02_1 values ('杭州','南京') tablespace wxq_tbs,

          subpartition part_02_2 values (default) tablespacesystem )

       );

 

    注:4、5两种方法简单了解一下就可以,记住格式。

 

 

    6、通过as select建立分区表

 

    createtable t1_trans_2

     

      partitionbyrange (polno)

      (

        partition part_01 valueslessthan(210010000000000) tablespace users,

        partition part_02 valueslessthan(maxvalue) tablespace wxq_tbs

       )

 

      as

    select * from lcpol;

 

    注:as语句必须写在分区的后面。

 

 

分区表的操作

 

    对于分区表,可以进行与正常的堆表一样的所有操作,另外还可以专门针对分区进行操作。

 

    1、查找某分区数据

 

    select * from t1_trans partition(part_01);

 

    2、操作某分区数据

 

    delete t1_trans partition(part_01);

 

    注:当数据量很大的时候,指定分区会大大提高效率

 

 

分区表维护

 

    1、删除分区

 

    altertable t1_trans

    droppartition part_02;

 

    注:删除分区会自动删除分区中的所有数据,而不是交由剩下分区。

 

    2、添加分区

 

    altertable t1_trans

    addpartition part_02 valueslessthan(20000) tablespace users;

 

    注:添加时不能在两个范围内插入分区,必须要大于最后一个分区的最大值。

 

    3、合并分区

 

    altertable t1_trans

    mergepartitions part_01,part_02 intopartition part_new;

 

    注:合并时不能将结果partition命名为小的那个partition名字。

 

    4、分裂分区

 

    altertable t1_trans

    splitpartition part_02 at (20000) into (partition part_02,partition part_03);

 

    5、改换分区所属tablespace

 

    altertable t1_trans

    movepartition part_03 tablespace wxq_tbs;

 

 

posted on 2008-10-18 19:32 decode360 阅读(155) 评论(0)  编辑  收藏 所属分类: 07.Oracle

只有注册用户登录后才能发表评论。


网站导航: