繁体   English   中英

MySQL 8 InnoDB - 分区 function 不允许

[英]MySQL 8 InnoDB - Partition function not allowed

我正在尝试对具有 300M+ 行的表进行分区。 数据包含 15 个月,我只需要定期使用过去 6 个月,偶尔需要过去 13 个月。

为了提高 6 个月查询的查询速度,我提出了以下分区命令:

ALTER TABLE my_db.my_table
 PARTITION BY RANGE (DATE_FORMAT(date, '%Y%m')) (
    PARTITION 2021_H1 VALUES LESS THAN (202107),
    PARTITION 2021_H2 VALUES LESS THAN (202201),
    PARTITION 2022_H1 VALUES LESS THAN (202207),
    PARTITION current VALUES LESS THAN (MAXVALUE)
 ) ;

作为回报,我得到:

[HY000][1564] This partition function is not allowed

这里有什么问题?

正如错误消息所暗示的那样,并非每个 function 都允许作为分区 function。 尝试使用to_days

ALTER TABLE my_db.my_table
 PARTITION BY RANGE (to_days(`date`)) (
    PARTITION 2021_H1 VALUES LESS THAN (to_days('2021-07-01')),
    PARTITION 2021_H2 VALUES LESS THAN (to_days('2022-01-01')),
    PARTITION 2022_H1 VALUES LESS THAN (to_days('2022-07-01')),
    PARTITION current VALUES LESS THAN (MAXVALUE)
 ) ;

注意:如果您遇到Error Code: 1503. A PRIMARY KEY must include all columns in the table's partitioning function确保根据原始 PK 和date列创建复合主键。 如果在 MySQL 中定义分区时表中有 PK,则这是强制性的。
注意:分区 InnoDB 表支持外键 因此,在进行分区尝试之前,请确保您首先没有它们。

ALTER TABLE my_db.my_table PARTITION BY RANGE (`date`) ( PARTITION 2021_H1 VALUES LESS THAN (20210701), PARTITION 2021_H2 VALUES LESS THAN (20220101), PARTITION 2022_H1 VALUES LESS THAN (20220701), PARTITION current VALUES LESS THAN (MAXVALUE) ) ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM