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

本文介绍如何使用Range-List组合分区方法创建表,并通过实例展示了复合分区中Local索引的分区情况。此外还讨论了复合分区的设计准则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建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、对于分区的表或索引,其所涉及的所有分区,其块大小必须一致。

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值