【发布时间】:2016-05-05 02:27:08
【问题描述】:
我正在尝试使用 DATE 列对数据库进行分区,以利用 MySQL 5.7 中的分区修剪。由于内部原因,我需要按RANGE COLUMNS 进行分区,因为添加/删除分区既简单又快捷。
虽然the MySQL website 说:
对于使用 RANGE COLUMNS 或 LIST COLUMNS 分区的表,优化器还可以对 WHERE 条件执行修剪,这些条件涉及在多个列上比较前面的类型。
它还说:
只要分区表达式包含一个等式或一个可以简化为一组等式的范围,或者当分区表达式表示增加或减少关系时,就可以应用这种类型的优化。当分区表达式使用 YEAR() 或 TO_DAYS() 函数时,也可以对在 DATE 或 DATETIME 列上分区的表应用修剪。此外,在 MySQL 5.7 中,当分区表达式使用 TO_SECONDS() 函数时,可以对此类表进行剪枝。
这似乎是矛盾的。我想知道是否可以对 DATE 列进行分区,例如:
PARTITION BY RANGE COLUMNS(date) (
PARTITION partition_2016_04_28 VALUES LESS THAN ('2016-04-28'),
PARTITION partition_2016_04_29 VALUES LESS THAN ('2016-04-29'),
PARTITION partition_2016_04_30 VALUES LESS THAN ('2016-04-30')
);
并且仍然利用分区修剪?如果可能的话,我想避免使用 TO_DAYS 函数,因为它使表格更干净,更易于使用。有什么想法吗?
【问题讨论】:
-
我建议
PARTITION BY RANGE(TO_DAYS(date)) ... LESS THAN (TO_DAYS('2016-04-28'))不要太繁琐。 Partitioning tips.
标签: mysql partitioning data-partitioning