按小时划分mysql表

mspsb9vt  于 9个月前  发布在  Mysql
关注(0)|答案(1)|浏览(108)

示例表如下所示

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

字符串
我希望创建一个分区上每小时的基础上,因为每小时将有大约4万条记录保存,我想一些处理后删除分区。最大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值必须严格递增每个分区
我不知道该如何继续前进

kninwzqo

kninwzqo1#

警告:在不到2年的时间里,id INT将溢出。
表中还有没有别的东西?如果有,为什么还要有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

相关问题