【发布时间】:2021-11-17 08:13:21
【问题描述】:
我的示例表如下所示
CREATE TABLE TEST_1 (
id int(11) NOT NULL AUTO_INCREMENT,
createdAt datetime NOT NULL,
name varchar(45) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
我希望每小时创建一个分区,因为每小时将保存大约 400 万条记录,我想在一些处理后删除该分区。一次最多可以使用 5 个分区。
首先尝试创建分区
alter table TEST_1 partition by range(createdAt)(
PARTITION pmin values less than ('2021-11-17 08:00:00'),
PARTITION p2020111709 values less than ('2020-11-17 09:00:00'),
PARTITION p2020111710 values less than ('2020-11-17 10:00:00'),
PARTITION p2020111711 values less than ('2020-11-17 11:00:00'),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
)
但它会抛出错误提示
错误代码:1697。分区“pmin”的 VALUES 值必须为 INT 类型
使用范围列会引发错误
错误代码:1493。每个分区的 VALUES LESS THAN 值必须严格递增
我不知道如何前进????
【问题讨论】:
-
您必须:(1) 将
createdAt的数据类型从 DATETIME 更改为 TIMESTAMP (2) 创建包含此列的主键 (3) 使用UNIX_TIMESTAMP(createdAt)作为分区表达式。
标签: mysql partitioning database-indexes