使用DATE和RANGE COLUMNS进行分区修剪

时间:2016-05-04 16:02:11

标签: mysql partitioning data-partitioning

我尝试使用DATE列对数据库进行分区,以利用MySQL 5.7中的分区修剪功能。出于内部原因,我需要按RANGE COLUMNS进行分区,因为添加/删除分区非常简单快捷。

虽然the MySQL website说:

  

优化器还可以对WHERE条件执行修剪​​,这些条件涉及对使用RANGE COLUMNS或LIST COLUMNS分区的表的多列进行比较。

它还说:

  

只要分区表达式由等式或可以减少到一组等式的范围组成,或者当分区表达式表示增加或减少关系时,就可以应用这种类型的优化。当分区表达式使用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功能,因为它使表格更清晰,更易于使用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我创建了自己的表并编写了自己的查询。使用EXPLAIN PARTITIONS我发现使用此方法在日期上进行分区确实使用了分区修剪。