28

次のようなテーブルがあります。

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 を含まない要件に従ってパーティションを再編成したいとします。

データを削除したり、テーブルを削除して再作成したりせずに、パーティションを再配置するのを手伝ってくれる人はいますか?

4

4 に答える 4

6

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が大きくなりすぎた場合は、同じ方法で分割できます。

于 2013-01-07T08:59:48.433 に答える
1

パーティションを再配置するために、既存のパーティションをすべて削除する必要はありません。構文で新しいパーティショニングを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);

PS MySQL 5.7.11 でテスト済み

于 2016-08-23T02:57:35.163 に答える
0

パーティションを維持したままデータを並べ替えたい場合は、ALTER TABLE コマンド
の REORGANIZE PARTITION 句と COALESCE PARTITION 句を参照してください。http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

于 2013-01-07T08:21:33.420 に答える