mysql 子分区_mysql8 参考手册-子分区

MySQL中的子分区是分区表的进一步细分,允许在每个分区基础上进行更细粒度的管理和存储。本文介绍了如何使用RANGE或LIST进行子分区,并通过HASH或KEY方法进行划分。创建一个具有3个RANGE分区和2个子分区的示例表,详细解释了子分区的语法和注意事项,强调了每个分区必须有相同数量的子分区,并且子分区名称在整个表中必须唯一。
摘要由CSDN通过智能技术生成

子分区(也称为 复合分区)是分区表中每个分区的进一步划分。考虑以下 CREATE TABLE语句:

CREATE TABLE ts (id INT, purchased DATE)

PARTITION BY RANGE( YEAR(purchased) )

SUBPARTITION BY HASH( TO_DAYS(purchased) )

SUBPARTITIONS 2 (

PARTITION p0 VALUES LESS THAN (1990),

PARTITION p1 VALUES LESS THAN (2000),

PARTITION p2 VALUES LESS THAN MAXVALUE

);

表ts有3个RANGE 分区。这些分区中的每个分区p0,p1和p2进一步分为2个子分区。实际上,整个表分为多个 3 * 2 = 6分区。但是,由于该PARTITION BY RANGE子句的作用,其中的前2个仅将值小于1990的记录存储在该purchased列中。

可以对通过RANGE或进行分区的表进行子分区 LIST。子分区可以使用HASH或 KEY分区。这也称为 复合分区。

注意

SUBPARTITION BY HASH和 SUBPARTITION BY KEY一般遵循相同的语法规则PARTITION BY HASH和 PARTITION BY KEY分别。唯一的例外是SUBPARTITION BY KEY(不同于PARTITION BY KEY)当前不支持默认列,因此即使表具有显式主键,也必须指定用于此目的的列。这是我们正在努力解决的已知问题;有关更多信息和示例,请参阅 子分区问题。

也可以使用SUBPARTITION子句明确定义子分区, 以指定各个子分区的选项。例如,创建与ts上一个示例所示相同的表的更为冗长的方式将是:

CREATE TABLE ts (id INT, purchased DATE)

PARTITION BY RANGE( YEAR(purchased) )

SUBPARTITION BY HASH( TO_DAYS(purchased) ) (

PARTITION p0 VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1 VALUES LESS THAN (2000) (

SUBPARTITION s2,

SUBPARTITION s3

),

PARTITION p2 VALUES LESS THAN MAXVALUE (

SUBPARTITION s4,

SUBPARTITION s5

)

);

这里列出了一些语法上的注意事项:

每个分区必须具有相同数量的子分区。

如果SUBPARTITION在分区表的任何分区上使用显式定义任何子分区 ,则必须全部定义它们。换句话说,以下语句将失败:

CREATE TABLE ts (id INT, purchased DATE)

PARTITION BY RANGE( YEAR(purchased) )

SUBPARTITION BY HASH( TO_DAYS(purchased) ) (

PARTITION p0 VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1 VALUES LESS THAN (2000),

PARTITION p2 VALUES LESS THAN MAXVALUE (

SUBPARTITION s2,

SUBPARTITION s3

)

);

即使使用该语句,它仍然会失败 SUBPARTITIONS 2。

每个SUBPARTITION子句必须(至少)包括子分区的名称。否则,您可以为子分区设置任何所需的选项,或者允许其采用该选项的默认设置。

子分区名称在整个表中必须唯一。例如,以下CREATE TABLE语句有效:

CREATE TABLE ts (id INT, purchased DATE)

PARTITION BY RANGE( YEAR(purchased) )

SUBPARTITION BY HASH( TO_DAYS(purchased) ) (

PARTITION p0 VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1 VALUES LESS THAN (2000) (

SUBPARTITION s2,

SUBPARTITION s3

),

PARTITION p2 VALUES LESS THAN MAXVALUE (

SUBPARTITION s4,

SUBPARTITION s5

)

);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值