按小时划分 mysql table
partiotion mysql table by hour basis
我的示例 table 看起来像这样
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)
)
但它抛出错误说
Error Code: 1697. VALUES value for partition 'pmin' must have type INT
使用范围列会抛出错误
Error Code: 1493. VALUES LESS THAN value must be strictly increasing for each partition
我不确定如何前进
注意:不到2年,id INT
会溢出。
table里还有别的吗?如果是这样,为什么还要 id
?
您如何处理 2000 万个“名称”列表?而且可以重复。
还有其他语法选项:
⚈ PARTITION BY RANGE COLUMNS(DATETIME) (5.5.0)
⚈ PARTITION BY RANGE(TIMESTAMP) (version 5.5.15 / 5.6.3)
⚈ PARTITION BY RANGE(TO_SECONDS()) (5.6.0)
第一个可能最接近您所拥有的。只需插入 COLUMNS
.
关于 PARTITIONing
的更多评论(包括上面的语法):http://mysql.rjweb.org/doc.php/partitionmaint
我的示例 table 看起来像这样
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)
)
但它抛出错误说
Error Code: 1697. VALUES value for partition 'pmin' must have type INT
使用范围列会抛出错误
Error Code: 1493. VALUES LESS THAN value must be strictly increasing for each partition
我不确定如何前进
注意:不到2年,id INT
会溢出。
table里还有别的吗?如果是这样,为什么还要 id
?
您如何处理 2000 万个“名称”列表?而且可以重复。
还有其他语法选项:
⚈ PARTITION BY RANGE COLUMNS(DATETIME) (5.5.0)
⚈ PARTITION BY RANGE(TIMESTAMP) (version 5.5.15 / 5.6.3)
⚈ PARTITION BY RANGE(TO_SECONDS()) (5.6.0)
第一个可能最接近您所拥有的。只需插入 COLUMNS
.
关于 PARTITIONing
的更多评论(包括上面的语法):http://mysql.rjweb.org/doc.php/partitionmaint