MySQL:为将来的日期添加分区

enc*_*nce 5 mysql partitioning

我正在尝试使用其created字段对现有表(使用现有数据)进行分区.是否可以为将来的日期创建许多分区?这有什么缺点吗?

由于我的表的现有PK只是id我改变它以包括created字段所以我可以通过RANGE以下方式对其进行分区:

ALTER TABLE orders DROP PRIMARY KEY, ADD PRIMARY KEY(id, created);
Run Code Online (Sandbox Code Playgroud)

添加分区到2018年底:

ALTER TABLE orders PARTITION BY RANGE (TO_DAYS(created))(
    PARTITION p001 VALUES LESS THAN (0),
    PARTITION p002 VALUES LESS THAN (TO_DAYS('2015-05-01')),
    PARTITION p003 VALUES LESS THAN (TO_DAYS('2015-09-01')),
    PARTITION p004 VALUES LESS THAN (TO_DAYS('2016-01-01')),
    PARTITION p005 VALUES LESS THAN (TO_DAYS('2016-05-01')),
    PARTITION p006 VALUES LESS THAN (TO_DAYS('2016-09-01')),
    PARTITION p007 VALUES LESS THAN (TO_DAYS('2017-01-01')),
    PARTITION p008 VALUES LESS THAN (TO_DAYS('2017-05-01')),
    PARTITION p009 VALUES LESS THAN (TO_DAYS('2017-09-01')),
    PARTITION p010 VALUES LESS THAN (TO_DAYS('2018-01-01')),
    PARTITION p011 VALUES LESS THAN (TO_DAYS('2018-05-01')),
    PARTITION p012 VALUES LESS THAN (TO_DAYS('2018-09-01')),
    PARTITION p013 VALUES LESS THAN (TO_DAYS('2019-01-01')),
    PARTITION pmax VALUES LESS THAN MAXVALUE
)
Run Code Online (Sandbox Code Playgroud)

这个可以吗?或者,在下一年申请新分区之前,要等到年底还好吗?

Ric*_*mes 3

  • 您希望通过添加分区获得什么优势?我这么问是因为没有任何性能提升,至少在没有其他改变的情况下是这样。

  • created您需要在所有PRIMARYUNIQUE键中包含“分区键” 、 。通常最好把它放在最后。(你就是这么做的。)

  • 由于许多操作会打开所有分区(是的,这可能是一个“错误”),因此拥有大量“未来”分区的效率很低。

  • 我建议一个表中有 20-50 个分区。少则无用;少则无用。更多会导致其他低效率。

在我的分区维护博客中,我列出了仅有的 4 个分区用例,并讨论了如何清除旧分区以及何时添加新分区。

  • 这没有回答任何问题 (3认同)