mysql 添加复合分区_MySQL复合分区

本文介绍了MySQL 5.6版本中对复合分区的支持,包括RANGE和LIST子分区的使用,强调了子分区数量的一致性和物理位置的指定。通过示例展示了如何创建和管理这些复合分区,并提到了可能遇到的错误及其对数据库IO的影响。
摘要由CSDN通过智能技术生成

到底还是开源软件,MySQL对复合分区的支持远远没有Oracle丰富。

在MySQL 5.6版本中,只支持RANGE和LIST的子分区,且子分区的类型只能为HASH和KEY。

譬如:

CREATE TABLE ts (id INT, purchased DATE)

PARTITIONBY RANGE( YEAR(purchased) )

SUBPARTITIONBYHASH( TO_DAYS(purchased) )

SUBPARTITIONS2(

PARTITION p0VALUES LESS THAN (1990),

PARTITION p1VALUES LESS THAN (2000),

PARTITION p2VALUESLESS THAN MAXVALUE

);

上述创建语句中,最外层是RANGE分区,分为3个区,里面是HASH子分区,分为2个区,这样,该表一共分了3*2=6个分区。

当然,也可以用SUBPARTITION语句来显示定义子分区。

CREATE TABLE ts (id INT, purchased DATE)

PARTITIONBY RANGE( YEAR(purchased) )

SUBPARTITIONBYHASH( TO_DAYS(purchased) ) (

PARTITION p0VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1VALUES LESS THAN (2000) (

SUBPARTITION s2,

SUBPARTITION s3

),

PARTITION p2VALUESLESS THAN MAXVALUE (

SUBPARTITION s4,

SUBPARTITION s5

)

);

注意:

1> 如果你在分区中使用了SUBPARTITION语句,则每个分区中都必须定义,且每个分区中子分区的数量必须保持一致。譬如以下两种用法就会报错:

CREATE TABLE ts (id INT, purchased DATE)

PARTITIONBY RANGE( YEAR(purchased) )

SUBPARTITIONBYHASH( TO_DAYS(purchased) ) (

PARTITION p0VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1VALUES LESS THAN (2000) (

SUBPARTITION s2

),

PARTITION p2VALUESLESS THAN MAXVALUE (

SUBPARTITION s3,

SUBPARTITION s4

)

);

CREATE TABLE ts (id INT, purchased DATE)

PARTITIONBY RANGE( YEAR(purchased) )

SUBPARTITIONBYHASH( TO_DAYS(purchased) ) (

PARTITION p0VALUES LESS THAN (1990) (

SUBPARTITION s0,

SUBPARTITION s1

),

PARTITION p1VALUES LESS THAN (2000),

PARTITION p2VALUESLESS THAN MAXVALUE (

SUBPARTITION s2,

SUBPARTITION s3

)

);

2> 在SUBPARTITION语句中,可指定该分区的物理位置。譬如:

CREATE TABLE ts (id INT, purchased DATE)

PARTITIONBY RANGE(YEAR(purchased))

SUBPARTITIONBYHASH( TO_DAYS(purchased) ) (

PARTITION p0VALUES LESS THAN (1990) (

SUBPARTITION s0a

DATA DIRECTORY= '/disk0'

INDEX DIRECTORY = '/disk1',

SUBPARTITION s0b

DATA DIRECTORY= '/disk2'

INDEX DIRECTORY = '/disk3'),

PARTITION p1VALUES LESS THAN (2000) (

SUBPARTITION s1a

DATA DIRECTORY= '/disk4/data'

INDEX DIRECTORY = '/disk4/idx',

SUBPARTITION s1b

DATA DIRECTORY= '/disk5/data'

INDEX DIRECTORY = '/disk5/idx'),

PARTITION p2VALUESLESS THAN MAXVALUE (

SUBPARTITION s2a,

SUBPARTITION s2b

)

);

以上这个创建语句,将不同的分区分布到不同的物理路径下,无疑会极大的分散IO,这一点还是蛮吸引人的。

可惜,在本机测试过程中,报“ERROR 1030 (HY000): Got error -1 from storage engine”错误,具体原因还不太清楚,怀疑是MySQL的bug。

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值