我正在考虑对 InnoDB 数据库中的表进行分区。我有一个对应于 UTC 时间戳的列,我想围绕它进行分区。
我想要捕捉的基本思想是一个分区方案,其中具有固定数量的分区,我们按如下方式循环它们:
给定 3 个分区(为简单起见 3 个)
- 从第 1 天起带有时间戳列的数据进入分区 1
- 第 2 天带有时间戳列的数据进入分区 2
- 第 3 天带有时间戳列的数据进入分区 3
- 第 4 天带有时间戳列的数据进入分区 1
- ..... 第 5 天 .... 分区 2
- ...冲洗并重复
基本上,从时间戳中提取日期并将行放入分区中DAY MOD N,其中DAY是时间戳对应的日期(过滤掉小时/分钟/秒)并且N是分区数。
这可能很容易完成,但我找不到类似的例子来模拟这一点。ALTER TABLE以这种方式进行分区的查询是什么?
更新
根据 atxdba 的建议,我尝试按哈希分区。我尝试了以下语句:
ALTER TABLE table_to_partition PARTITION BY HASH(DAYOFMONTH(FROM_UNIXTIME(my_timestamp))) partitions 8;
Run Code Online (Sandbox Code Playgroud)
这导致错误代码 1564:This partition function is not allowed. 查看此分区限制列表,似乎不支持 FROM_UNIXTIMESTAMP 对表进行分区,因此需要从时间戳到日期的不同转换。