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

时间:2015-08-19 03:17:51

标签: mysql partitioning

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

由于我的表格的现有PK只是id我将其更改为包含created字段,因此我可以按RANGE对其进行分区:

ALTER TABLE orders DROP PRIMARY KEY, ADD PRIMARY KEY(id, created);

添加分区到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
)

这可以吗?或者,在下一年申请新分区之前,等到年底会好得多吗?

1 个答案:

答案 0 :(得分:3)

  • 您希望通过添加分区获得哪些优势?我问,因为没有任何性能提升,至少没有其他变化。

  • 您需要在所有createdPRIMARY键中加入“分区键”UNIQUE。通常最好把它放在最后。 (你做到了。)

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

  • 我建议在表格中使用20-50个分区。少就没用了;更多会导致其他效率低下。

在我的Partition Maintenance blog中,我列出了仅有4个用于分区的用例,另外还讨论了如何清除旧分区以及何时添加新分区。