和Oracle不一样的是:MySQL没有全局索引,只有分区索引,因此对于MySQL的分区表来说,限制比Oracle要多一些:
1、分区键必须是主键的一部分
2、分区键的数据类型必须是整形(包括时间类型)
3、分区键不能为NULL
下面是一个基于时间的表分区定义:
PARTITION BY RANGE (TO_DAYS(START)) ( PARTITION p201401 VALUES LESS THAN (TO_DAYS(‘20140201‘)), PARTITION p201402 VALUES LESS THAN (TO_DAYS(‘20140301‘)), PARTITION p201403 VALUES LESS THAN (TO_DAYS(‘20140401‘)), PARTITION p201404 VALUES LESS THAN (TO_DAYS(‘20140501‘)), PARTITION p201405 VALUES LESS THAN (TO_DAYS(‘20140601‘)), PARTITION p201406 VALUES LESS THAN (TO_DAYS(‘20140701‘)), PARTITION p201407 VALUES LESS THAN (TO_DAYS(‘20140801‘)), PARTITION p201408 VALUES LESS THAN (TO_DAYS(‘20140901‘)), PARTITION p201409 VALUES LESS THAN (TO_DAYS(‘20141001‘)), PARTITION p201410 VALUES LESS THAN (TO_DAYS(‘20141101‘)), PARTITION p201411 VALUES LESS THAN (TO_DAYS(‘20141201‘)), PARTITION p201412 VALUES LESS THAN (TO_DAYS(‘20150101‘)), PARTITION pmax VALUES LESS THAN maxvalue );
关于MySQL的分区管理也没有Oracle那么强大,从5.6开始才支持分区交换。