暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AUTO模式分区名命名规则

酷数据库 2023-11-23
289

当您需要访问或修改指定的一级分区或二级分区时,通常语法里需要指定具体的一级分区或二级分区的名称。因此,这里对分区表中一些会自动生成分区名称的规则进行说明。

分区表中涉及到自动生成分区名称的有以下几种情况:

  • 分区表或全局索引表使用HASH或KEY进行分区(包括自动分区表);

  • 分区表使用模板化二级分区进行分区;

  • 哈希分区表被手动执行分区分裂变更。

一级分区命名规则

一级分区会自动生成分区名称的场景主要是使用哈希分区策略(Hash或Key)并仅指定哈希分区数目(包括手动分区表与自动分区表)。

使用哈希策略进行分区,其分区名字的命名规则为:p+分区下标(从1开始计数)。

CREATE TABLE test_tbl_part_name(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY KEY(id) 
PARTITIONS 4

例如,若使用上述语句创建分区表,生成的分区名称为:第1个哈希分区的名称是p1,第2个哈希分区的名称是p2,如此类推。以下是实际验证结果:

CREATE TABLE test_tbl_part_name (
    ->  id bigint not null auto_increment, 
    ->  primary key(id)
    -> ) 
    -> PARTITION BY KEY(id) 
    -> PARTITIONS 4;
Query OK, 0 rows affected (1.13 sec)

select table_name,partition_name from information_schema.partitions where table_name='test_tbl_part_name';
+--------------------+----------------+
| table_name         | partition_name |
+--------------------+----------------+
| test_tbl_part_name | p1             |
| test_tbl_part_name | p2             |
| test_tbl_part_name | p3             |
| test_tbl_part_name | p4             |
+--------------------+----------------+
4 rows in set (0.59 sec)

如果用户通过ALTER语句对分区表的特定分区进行一些分裂变更,那么分裂生成的新分区名字的命名规则为:p+当前最大分区下标+1 。示例如下:

alter table test_tbl_part_name split partition p1;
Query OK, 0 rows affected (5.83 sec)

select table_name,partition_name from information_schema.partitions where table_name='test_tbl_part_name';
+--------------------+----------------+
| table_name         | partition_name |
+--------------------+----------------+
| test_tbl_part_name | p5             |
| test_tbl_part_name | p6             |
| test_tbl_part_name | p2             |
| test_tbl_part_name | p3             |
| test_tbl_part_name | p4             |
+--------------------+----------------+
5 rows in set (0.18 sec)

二级分区命名规则

二级分区有模板化与非模板化两种用法,因此二级分区名称的生成规则比一级分区的稍微复杂一些。

对于模板化二级分区,哈希分区模板的命名规则是:sp+二级分区下标(从1开始计数)。

对于非模板化二级分区,各个一级分区下的哈希分区名字是独立生成的,其命名规则是:sp+二级分区下标(从1开始计数,各个一级分区独立计数)。

对于所有二级分区,其分区实际名字的生成规则是:一级分区名字+二级分区(模板)名字。

例如,使用以下分区定义创建模板化二级分区表:

CREATE TABLE test_tbl_part_name2(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY KEY(bid) 
PARTITIONS 2
SUBPARTITION BY KEY(id) 
SUBPARTITIONS 4

这个表的所有二级分区的名称生成过程如下:

  1. 自动生成一级分区的哈希分区:p1,p2;

  2. 自动生成二级分区模板的哈希分区名,sp1,sp2,sp3,sp4;

  3. 最后生成二级分区的实际名字(物理分区名字,一级分区名+二级分区名):

    • p1sp1,p1sp2,p1sp3,p1sp4

    • p2sp1,p2sp2,p2sp3,p2sp4

以下是分区信息的查询结果:

CREATE TABLE test_tbl_part_name2(
    ->  id bigint not null auto_increment, 
    ->  bid int, 
    ->  name varchar(30),
    ->  birthday datetime not null,
    ->  primary key(id)
    -> ) 
    -> PARTITION BY KEY(bid) 
    -> PARTITIONS 2
    -> SUBPARTITION BY KEY(id) 
    -> SUBPARTITIONS 4;
Query OK, 0 rows affected (1.40 sec)

select table_name,partition_name,subpartition_name from information_schema.partitions where table_schema='autodb2' and table_name='test_tbl_part_name2';
+---------------------+----------------+-------------------+
| table_name          | partition_name | subpartition_name |
+---------------------+----------------+-------------------+
| test_tbl_part_name2 | p1             | p1sp1             |
| test_tbl_part_name2 | p1             | p1sp2             |
| test_tbl_part_name2 | p1             | p1sp3             |
| test_tbl_part_name2 | p1             | p1sp4             |
| test_tbl_part_name2 | p2             | p2sp1             |
| test_tbl_part_name2 | p2             | p2sp2             |
| test_tbl_part_name2 | p2             | p2sp3             |
| test_tbl_part_name2 | p2             | p2sp4             |
+---------------------+----------------+-------------------+
8 rows in set (0.12 sec)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论