[置顶] 深入学习分区表及分区索引(6)--创建range-list组合分区

创建range-list组合分区

Range-list组合分区的创建与range-hash极为相似,只是子分区为list分区,当然同样也可以应用分区模板,下面也举一个示例:

JSSWEB> create table t_partition_rl (id number,name varchar2(50))

  2  partition by range(id) subpartition by list(name)

  3  subpartition template (

  4   subpartition l1 values ('aa') tablespace tbspart01,

  5   subpartition l2 values ('bb') tablespace tbspart02,

  6   subpartition l3 values ('cc') tablespace tbspart03,

  7   subpartition l4 values ('dd') tablespace tbspart04)(

  8  partition t_r_p1 values less than (10) tablespace tbspart01,

  9  partition t_r_p2 values less than (20) tablespace tbspart02,

 10  partition t_r_p3 values less than (30) tablespace tbspart03,

 11  partition t_r_pd values less than (maxvalue) tablespace tbspart04);

表已创建。

JSSWEB> select partition_name,subpartition_name,tablespace_name

  2  from user_tab_subpartitions where table_name='T_PARTITION_RL';

PARTITION_NAME  SUBPARTITION_NAME              TABLESPACE_NAME

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

T_R_P1          T_R_P1_L4                      TBSPART01

T_R_P1          T_R_P1_L3                      TBSPART01

T_R_P1          T_R_P1_L2                      TBSPART01

T_R_P1          T_R_P1_L1                      TBSPART01

T_R_P2          T_R_P2_L4                      TBSPART02

T_R_P2          T_R_P2_L3                      TBSPART02

T_R_P2          T_R_P2_L2                      TBSPART02

T_R_P2          T_R_P2_L1                      TBSPART02

T_R_P3          T_R_P3_L4                      TBSPART03

T_R_P3          T_R_P3_L3                      TBSPART03

T_R_P3          T_R_P3_L2                      TBSPART03

T_R_P3          T_R_P3_L1                      TBSPART03

T_R_PD          T_R_PD_L4                      TBSPART04

T_R_PD          T_R_PD_L3                      TBSPART04

T_R_PD          T_R_PD_L2                      TBSPART04

T_R_PD          T_R_PD_L1                      TBSPART04

已选择16行。

其它方式的创建对于range-list同样好使,这里不再举例,如有不明,请自学复习前章range_hash组合分区。

对于复合分区的local索引,我们也举一个示例,查看其分区情况:

SQL> create index idx_part_rl_id on t_partition_rl(id) local;

索引已创建。

又可以学几个数据字典:user_part_indexes、user_ind_partitions前面已经认识了,user_ind_subpartitions用来查询索引的子分区信息。

SQL> select table_name,partitioning_type,

  2         partition_count,def_subpartition_count

  3    from user_part_indexes

  4   where index_name = 'IDX_PART_RL_ID';

TABLE_NAME                     PARTITI PARTITION_COUNT DEF_SUBPARTITION_COUNT

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

T_PARTITION_RL                 RANGE                 4                      4

SQL> select partition_name, subpartition_count, high_value

  2    from user_ind_partitions

  3   where index_name = 'IDX_PART_RL_ID';

PARTITION_NAME  SUBPARTITION_COUNT HIGH_VALUE

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

T_R_P1                           4 10

T_R_P2                           4 20

T_R_P3                           4 30

T_R_PD                           4 MAXVALUE

SQL> select partition_name, subpartition_name, high_value, tablespace_name

  2    from user_ind_subpartitions

  3   where index_name = 'IDX_PART_RL_ID';

PARTITION_NAME  SUBPARTITION_NAME              HIGH_VALUE      TABLESPACE_NAME

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

T_R_P1          T_R_P1_L1                      'aa'            TBSPART01

T_R_P1          T_R_P1_L2                      'bb'            TBSPART01

T_R_P1          T_R_P1_L3                      'cc'            TBSPART01

T_R_P1          T_R_P1_L4                      'dd'            TBSPART01

T_R_P2          T_R_P2_L1                      'aa'            TBSPART02

T_R_P2          T_R_P2_L2                      'bb'            TBSPART02

T_R_P2          T_R_P2_L3                      'cc'            TBSPART02

T_R_P2          T_R_P2_L4                      'dd'            TBSPART02

T_R_P3          T_R_P3_L1                      'aa'            TBSPART03

T_R_P3          T_R_P3_L2                      'bb'            TBSPART03

T_R_P3          T_R_P3_L3                      'cc'            TBSPART03

T_R_P3          T_R_P3_L4                      'dd'            TBSPART03

T_R_PD          T_R_PD_L1                      'aa'            TBSPART04

T_R_PD          T_R_PD_L2                      'bb'            TBSPART04

T_R_PD          T_R_PD_L3                      'cc'            TBSPART04

T_R_PD          T_R_PD_L4                      'dd'            TBSPART04

已选择16行。

还是与表的分区格式一样,不管是普通分区还是复合分区,local索引都没啥自主权啊。

公共准则

1、如果选择的分区不能确保各分区内记录量的基本平均,则这种分区方式有可能是不恰当的。

比如对于range分区,假设分了10个分区,而其中一个分区中的记录数占总记录数的90%,其它9个分区只占总记录数的10%,则这个分区方式就起不到数据平衡的作用。当然,如果你的目的并不是为了平衡,只是为了区分数据,ok,对于这种情况,我想说的是,你务必要意识到存在这个问题。

2、对于分区的表或索引,其所涉及的所有分区,其块大小必须一致。

最后,建议对于上面创建的表或建表脚本妥善保存并记忆,后面我们需要频繁用到,后续示例将均主要依赖前文中创建的表进行:)

=======================================


你可能感兴趣的:(list,脚本,user,table)