web-dev-qa-db-ja.com

MySQLにデータをドロップせずにパーティションをドロップする方法は?

私のようなテーブルがあります:

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が含まれていない要件に応じてパーティションを再編成します。

データを削除したりテーブルを削除したりせずにパーティションを再作成して、再作成するのに役立つ人はいますか?

22
vidyadhar
ALTER TABLE tbl REMOVE PARTITIONING;
102
user2643317

パーティションを再編成できます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が大きくなりすぎて、同じように分割できます。

7
Michel Feldheim

パーティションを維持したままデータを再配置したい場合は、
ALTER TABLEのREORGANIZE PARTITIONおよびCOALESCE PARTITION句を確認できます
コマンド。
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

1
Rahul Bisht

パーティションを再配置しても、既存のパーティションをすべて削除する必要はありません。 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でテスト済み

1
Tse Kit Yam