【问题标题】:Partition Pruning using DATE and RANGE COLUMNS使用 DATE 和 RANGE COLUMNS 进行分区修剪
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2016-09-07
    • 2011-03-10
    相关资源
    最近更新 更多