MySQL 5.1分区

Lee*_*ong 9 mysql partitioning

我有以下示例表...

mysql> CREATE TABLE part_date3
    ->      (  c1 int default NULL,
    ->  c2 varchar(30) default NULL,
    ->  c3 date default NULL) engine=myisam
    ->      partition by range (to_days(c3))
    -> (PARTITION p0 VALUES LESS THAN (to_days('1995-01-01')),
    -> PARTITION p1 VALUES LESS THAN (to_days('1996-01-01')) ,
    -> PARTITION p2 VALUES LESS THAN (to_days('1997-01-01')) ,
    -> PARTITION p3 VALUES LESS THAN (to_days('1998-01-01')) ,
    -> PARTITION p4 VALUES LESS THAN (to_days('1999-01-01')) ,
    -> PARTITION p5 VALUES LESS THAN (to_days('2000-01-01')) ,
    -> PARTITION p6 VALUES LESS THAN (to_days('2001-01-01')) ,
    -> PARTITION p7 VALUES LESS THAN (to_days('2002-01-01')) ,
    -> PARTITION p8 VALUES LESS THAN (to_days('2003-01-01')) ,
    -> PARTITION p9 VALUES LESS THAN (to_days('2004-01-01')) ,
    -> PARTITION p10 VALUES LESS THAN (to_days('2010-01-01')),
    -> PARTITION p11 VALUES LESS THAN MAXVALUE );
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

假设这里充满了数据,我想在p11中插入2011分区,然后使p12 maxvalue有一种有效的方法来实现这一点,而无需转储和重新加载整个表?

M. *_*iaz 7

回答你确切的问题

我想在p11插入2011分区,然后制作p12 maxvalue

这是查询

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')),
    PARTITION p12 VALUES LESS THAN MAXVALUE
);
Run Code Online (Sandbox Code Playgroud)


Doj*_*ojo 3

您需要删除 MAXVALUE 分区,添加新分区,然后再次添加新的 MAXVALUE 分区。这是一个快速操作,您不会丢失除 MAXVALUE 分区之外的任何分区中的数据。

如果您想将数据保留在 MAXVALUE 分区中,请查看 ALTER TABLE 的 REORGAINZE PARTITION 和 COALESCE PARTITION 子句 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

我有同样的问题。我删除了 MAXVALUE 分区,添加了新分区,但没有再次添加 MAXVALUE 分区。就我而言,应用程序将来永远不会插入任何数据过多的记录,以至于需要 MAXVALUE 分区。

分区维护与事件配合得很好。请参阅 http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html