mysql:検証!レンジパーティション表でパーティションキーを変更
レンジパーティショニングの設定でプライマリキーを変更した場合、パーティションの再割り当てをしてくれるのか? を検証してみました。そりゃそうだよね?という結果でしたが、なんか感動しました。
▼テストテーブルの作成 create table pt_test ( id int not null, detail varchar(20), PRIMARY KEY (id) );
▼パーティション化 alter table pt_test PARTITION BY RANGE (id) ( PARTITION p00 VALUES LESS THAN (10), PARTITION p10 VALUES LESS THAN (20), PARTITION p20 VALUES LESS THAN (30), PARTITION pover VALUES LESS THAN MAXVALUE );
▼初回データ投入 insert into pt_test values (5,'test5'); insert into pt_test values (15,'test15'); insert into pt_test values (25,'test25'); insert into pt_test values (100,'test100');
▼結果確認 select TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,PARTITION_ORDINAL_POSITION,TABLE_ROWS from INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='pt_test';
+--------------+------------+----------------+----------------------------+------------+ | TABLE_SCHEMA | TABLE_NAME | PARTITION_NAME | PARTITION_ORDINAL_POSITION | TABLE_ROWS | +--------------+------------+----------------+----------------------------+------------+ | myDB | pt_test | p00 | 1 | 1 | | myDB | pt_test | p10 | 2 | 1 | | myDB | pt_test | p20 | 3 | 1 | | myDB | pt_test | pover | 4 | 1 | +--------------+------------+----------------+----------------------------+------------+ 4 rows in set (0.01 sec)
▼プライマリキーを変更 mysql> update pt_test set id = 26 where id = 5 ; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> update pt_test set id = 3 where id = 100 ; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
▼結果確認 見ていただくとわかるとおり、key値のUPDATEによりパーティションが移動しているのがわかるかと 思います。頭いい!! +--------------+------------+----------------+----------------------------+------------+ | TABLE_SCHEMA | TABLE_NAME | PARTITION_NAME | PARTITION_ORDINAL_POSITION | TABLE_ROWS | +--------------+------------+----------------+----------------------------+------------+ | myDB | pt_test | p00 | 1 | 1 | | myDB | pt_test | p10 | 2 | 1 | | myDB | pt_test | p20 | 3 | 2 | | myDB | pt_test | pover | 4 | 0 | +--------------+------------+----------------+----------------------------+------------+ 4 rows in set (0.00 sec)