创建range-list组合分区
Range-list组合分区的创建与range-hash极为相似,只是子分区为list分区,当然同样也可以应用分区模板,下面也举一个示例:
JSSWEB>createtablet_partition_rl(idnumber,namevarchar2(50))
2partitionbyrange(id)subpartitionbylist(name)
3subpartitiontemplate(
4subpartitionl1values('aa')tablespacetbspart01,
5subpartitionl2values('bb')tablespacetbspart02,
6subpartitionl3values('cc')tablespacetbspart03,
7subpartitionl4values('dd')tablespacetbspart04)(
8partitiont_r_p1valueslessthan(10)tablespacetbspart01,
9partitiont_r_p2valueslessthan(20)tablespacetbspart02,
10partitiont_r_p3valueslessthan(30)tablespacetbspart03,
11partitiont_r_pdvalueslessthan(maxvalue)tablespacetbspart04);
表已创建。
JSSWEB>selectpartition_name,subpartition_name,tablespace_name
2fromuser_tab_subpartitionswheretable_name='T_PARTITION_RL';
PARTITION_NAMESUBPARTITION_NAMETABLESPACE_NAME
-----------------------------------------------------------------
T_R_P1T_R_P1_L4TBSPART01
T_R_P1T_R_P1_L3TBSPART01
T_R_P1T_R_P1_L2TBSPART01
T_R_P1T_R_P1_L1TBSPART01
T_R_P2T_R_P2_L4TBSPART02
T_R_P2T_R_P2_L3TBSPART02
T_R_P2T_R_P2_L2TBSPART02
T_R_P2T_R_P2_L1TBSPART02
T_R_P3T_R_P3_L4TBSPART03
T_R_P3T_R_P3_L3TBSPART03
T_R_P3T_R_P3_L2TBSPART03
T_R_P3T_R_P3_L1TBSPART03
T_R_PDT_R_PD_L4TBSPART04
T_R_PDT_R_PD_L3TBSPART04
T_R_PDT_R_PD_L2TBSPART04
T_R_PDT_R_PD_L1TBSPART04
已选择16行。
其它方式的创建对于range-list同样好使,这里不再举例,如有不明,请自学复习前章range_hash组合分区。
对于复合分区的local索引,我们也举一个示例,查看其分区情况:
SQL>createindexidx_part_rl_idont_partition_rl(id)local;
索引已创建。
又可以学几个数据字典:user_part_indexes、user_ind_partitions前面已经认识了,user_ind_subpartitions用来查询索引的子分区信息。
SQL>selecttable_name,partitioning_type,
2partition_count,def_subpartition_count
3fromuser_part_indexes
4whereindex_name='IDX_PART_RL_ID';
TABLE_NAMEPARTITIPARTITION_COUNTDEF_SUBPARTITION_COUNT
--------------------------------------------------------------------------
T_PARTITION_RLRANGE44
SQL>selectpartition_name,subpartition_count,high_value
2fromuser_ind_partitions
3whereindex_name='IDX_PART_RL_ID';
PARTITION_NAMESUBPARTITION_COUNTHIGH_VALUE
------------------------------------------------
T_R_P1410
T_R_P2420
T_R_P3430
T_R_PD4MAXVALUE
SQL>selectpartition_name,subpartition_name,high_value,tablespace_name
2fromuser_ind_subpartitions
3whereindex_name='IDX_PART_RL_ID';
PARTITION_NAMESUBPARTITION_NAMEHIGH_VALUETABLESPACE_NAME
--------------------------------------------------------------------------------
T_R_P1T_R_P1_L1'aa'TBSPART01
T_R_P1T_R_P1_L2'bb'TBSPART01
T_R_P1T_R_P1_L3'cc'TBSPART01
T_R_P1T_R_P1_L4'dd'TBSPART01
T_R_P2T_R_P2_L1'aa'TBSPART02
T_R_P2T_R_P2_L2'bb'TBSPART02
T_R_P2T_R_P2_L3'cc'TBSPART02
T_R_P2T_R_P2_L4'dd'TBSPART02
T_R_P3T_R_P3_L1'aa'TBSPART03
T_R_P3T_R_P3_L2'bb'TBSPART03
T_R_P3T_R_P3_L3'cc'TBSPART03
T_R_P3T_R_P3_L4'dd'TBSPART03
T_R_PDT_R_PD_L1'aa'TBSPART04
T_R_PDT_R_PD_L2'bb'TBSPART04
T_R_PDT_R_PD_L3'cc'TBSPART04
T_R_PDT_R_PD_L4'dd'TBSPART04
已选择16行。
还是与表的分区格式一样,不管是普通分区还是复合分区,local索引都没啥自主权啊。
公共准则
1、如果选择的分区不能确保各分区内记录量的基本平均,则这种分区方式有可能是不恰当的。
比如对于range分区,假设分了10个分区,而其中一个分区中的记录数占总记录数的90%,其它9个分区只占总记录数的10%,则这个分区方式就起不到数据平衡的作用。当然,如果你的目的并不是为了平衡,只是为了区分数据,ok,对于这种情况,我想说的是,你务必要意识到存在这个问题。
2、对于分区的表或索引,其所涉及的所有分区,其块大小必须一致。
最后,建议对于上面创建的表或建表脚本妥善保存并记忆,后面我们需要频繁用到,后续示例将均主要依赖前文中创建的表进行:)
=======================================