具有修改后的列值的范围分区表,而无需重新创建表

时间:2018-07-18 07:50:56

标签: mysql database-partitioning

我的表中有一列类型为bigint(20)的“时间戳”。但是,插入的值是unix时间戳的乘积,导致附加位数。示例如下:

插入的是 153182595270039 ,实际上是 1531825952 (2018年7月17日)

该表具有以下值作为示例:

uid | car_name | ts
1   | redcar    | 153182595270039

我想根据使用范围的上述时间戳进行分区。

但是,由于上述值不是PARTITION BY RANGE接受的unix时间戳,因此这似乎并不简单。

要解决此问题,我用ts列创建了一个附加列,后来又在新创建的列的分区上:

1. create a temporary column of "partition_category"
ALTER TABLE car_table ADD partition_category bigint(20);
2. copy the ts into partition_category/100000 
UPDATE car_table SET partition_category=ts/100000;
3. Execute the partition
ALTER TABLE car_table PARTITION BY RANGE (partition_category) ( PARTITION p201701 VALUES LESS THAN (UNIX_TIMESTAMP("2018-02-01 00:00:00")), PARTITION p201707 VALUES LESS THAN (UNIX_TIMESTAMP("2018-07-01 00:00:00")));

但是由于 PRIMARY KEY必须在表的分区功能中包含所有列,因此上述步骤失败了,这意味着我必须在CREATE步骤上重建表才能考虑新推出的partition_category

如果给定值如上,是否有更好的方法对ts进行分区?是否可以进行分区而不必更改CREATE表语句?

0 个答案:

没有答案