我正在尝试使用其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
)
这可以吗?或者,在下一年申请新分区之前,等到年底会好得多吗?
答案 0 :(得分:3)
您希望通过添加分区获得哪些优势?我问,因为没有任何性能提升,至少没有其他变化。
您需要在所有created
和PRIMARY
键中加入“分区键”UNIQUE
。通常最好把它放在最后。 (你做到了。)
由于许多操作都打开了所有分区(是的,这可能是一个'错误'),因此拥有大量“未来”分区效率很低。
我建议在表格中使用20-50个分区。少就没用了;更多会导致其他效率低下。
在我的Partition Maintenance blog中,我列出了仅有4个用于分区的用例,另外还讨论了如何清除旧分区以及何时添加新分区。