如何删除分区而不丢弃MySQL中的数据?

vid*_*har 20 mysql sql database database-administration database-partitioning

我有一张桌子:

create table registrations( 
id int not null auto_increment primary key,
name varchar(50),
mobile_number varchar(13)) 
engine=innodb 
partition by range(id) (
partition p0 values less than (10000),
partition p0 values less than (20000),
partition p0 values less than max value);
Run Code Online (Sandbox Code Playgroud)

不完全像上面那样但与......相似

现在假设我的表有200000行,现在我想删除表上的分区,并根据要求重新组织它们,而不包含MAX VALUE.

任何人都可以帮我重新排列分区而不丢弃数据或删除表并重新创建它吗?

小智 99

ALTER TABLE tbl REMOVE PARTITIONING;
Run Code Online (Sandbox Code Playgroud)


Mic*_*eim 7

您可以p0使用该ALTER TABLE .. REORGANIZE PARTITION命令重新组织分区.

http://dev.mysql.com/doc/refman/5.5/en/partitioning-management-range-list.html

如果要在不丢失数据的情况下更改表的分区,请使用ALTER TABLE ... REORGANIZE PARTITION

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000),
    PARTITION p0 VALUES LESS THAN (20000)
);
Run Code Online (Sandbox Code Playgroud)

请注意,在您实际创建多个分区之前,这是没有意义的

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000),
    PARTITION p1 VALUES LESS THAN (20000),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);
Run Code Online (Sandbox Code Playgroud)

看看MySQL中的RANGE分区

如果您的分区p2变得太大,您可以以相同的方式拆分它.


小智 0

如果您想在保留分区的同时重新排列数据,
可以查看 ALTER TABLE
命令的 REORGANIZE PARTITION 和 COALESCE PARTITION 子句。
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html