我尝试使用DATE列对数据库进行分区,以利用MySQL 5.7中的分区修剪功能。出于内部原因,我需要按RANGE COLUMNS
进行分区,因为添加/删除分区非常简单快捷。
优化器还可以对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功能,因为它使表格更清晰,更易于使用。有什么想法吗?
答案 0 :(得分:0)
我创建了自己的表并编写了自己的查询。使用EXPLAIN PARTITIONS
我发现使用此方法在日期上进行分区确实使用了分区修剪。