【发布时间】:2020-12-22 09:28:48
【问题描述】:
我有一个带有 ReferenceDate 字段的表格。我打算使用该字段对其进行分区,如下所示:
- partition_0:超过 1 年的值;
- partition_1:超过 6 个月的值;
- partition_2:超过 3 个月的值;
- partition_3:过去 3 个月的值;
为此,我尝试了以下脚本来更改表格:
ALTER TABLE `MyTable`
PARTITION BY RANGE (DATEDIFF(NOW(), `ReferenceDate`))
(
PARTITION p0_historic_data VALUES LESS THAN (90),
PARTITION p1_intermediary_data VALUES LESS THAN (180),
PARTITION p2_intermediary_data VALUES LESS THAN (365),
PARTITION p3_current_data VALUES LESS THAN MAXVALUE
);
但是,我相信我不能使用 Now () 函数,在分区子句中,我能够做的是使用 TO_DATE,但它没有给我所需的回报,使用 DIFF 我有价值当前日期与 ReferenceDate 的差值,TO_DATE 返回第 0 年到当前日期的天数。
我想知道是否真的没有办法使用 DIFF,或者在这种意义上是否有任何替代方法。
【问题讨论】:
-
这没有意义,因为它必须随着当前时间的变化不断更新所有分区。
-
我明白了,这个问题更多的是在这个意义上,也就是说,是否有办法动态地做到这一点......@Barmar
-
我不这么认为。它必须至少每天重新分区,如果
ReferenceDate是DATETIME而不是DATE,则可能更频繁(因为日期差异取决于当前时间)。
标签: mysql partitioning