私のようなテーブルがあります:
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);
上記とまったく同じではありませんが、それに似ています。
次に、テーブルに200000行あるとします。テーブルのパーティションを削除し、MAX VALUEが含まれていない要件に応じてパーティションを再編成します。
データを削除したりテーブルを削除したりせずにパーティションを再作成して、再作成するのに役立つ人はいますか?
ALTER TABLE tbl REMOVE PARTITIONING;
パーティションを再編成できます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)
);
実際にいくつかのパーティションを作成するまで、これは意味をなさないことに注意してください。
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
);
MySQLのRANGEパーティショニング を見てください。
パーティションp2
が大きくなりすぎて、同じように分割できます。
パーティションを維持したままデータを再配置したい場合は、
ALTER TABLEのREORGANIZE PARTITIONおよびCOALESCE PARTITION句を確認できます
コマンド。
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
パーティションを再配置しても、既存のパーティションをすべて削除する必要はありません。 ALTER TABLE
構文で新しいパーティションを直接指定でき、データが失われることはありません。
ALTER TABLE registrations
PARTITION by RANGE(id) (
PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000),
PARTITION p4 VALUES LESS THAN (40000),
PARTITION p5 VALUES LESS THAN (MAXVALUE);
P.S。MySQL 5.7.11でテスト済み