@blog.justoneplanet.info

日々勉強

パーティショニングする

以下のクエリを実行する。但し、TIMESTAMP型はMySQLのバージョンによってはバグがあってTIMESTAMP型のカラムでパーティショニングできないのでdatetime型などに変更する必要がある。

ALTER TABLE `log` PARTITION BY RANGE columns (created) (
PARTITION p20130101 VALUES LESS THAN ('2013-01-01 00:00:00'),
PARTITION p20130201 VALUES LESS THAN ('2013-02-01 00:00:00'),
PARTITION p20130301 VALUES LESS THAN ('2013-03-01 00:00:00'),
PARTITION p20130401 VALUES LESS THAN ('2013-04-01 00:00:00'),
PARTITION p20130501 VALUES LESS THAN ('2013-05-01 00:00:00'),
PARTITION p20130601 VALUES LESS THAN ('2013-06-01 00:00:00'),
PARTITION p20130701 VALUES LESS THAN ('2013-07-01 00:00:00'),
PARTITION p20130801 VALUES LESS THAN ('2013-08-01 00:00:00'),
PARTITION p20130901 VALUES LESS THAN ('2013-09-01 00:00:00'),
PARTITION p20131001 VALUES LESS THAN ('2013-10-01 00:00:00'),
PARTITION p20131101 VALUES LESS THAN ('2013-11-01 00:00:00'),
PARTITION p20131201 VALUES LESS THAN ('2013-12-01 00:00:00'),
PARTITION p20140101 VALUES LESS THAN ('2014-01-01 00:00:00'),
PARTITION p20140201 VALUES LESS THAN ('2014-02-01 00:00:00'),
PARTITION p20140301 VALUES LESS THAN ('2014-03-01 00:00:00'),
PARTITION p20140401 VALUES LESS THAN ('2014-04-01 00:00:00'),
PARTITION p20140501 VALUES LESS THAN ('2014-05-01 00:00:00'),
PARTITION p20140601 VALUES LESS THAN ('2014-06-01 00:00:00'),
PARTITION p20140701 VALUES LESS THAN ('2014-07-01 00:00:00'),
PARTITION p20140801 VALUES LESS THAN ('2014-08-01 00:00:00'),
PARTITION p20140901 VALUES LESS THAN ('2014-09-01 00:00:00'),
PARTITION p20141001 VALUES LESS THAN ('2014-10-01 00:00:00'),
PARTITION p20141101 VALUES LESS THAN ('2014-11-01 00:00:00'),
PARTITION p20141201 VALUES LESS THAN ('2014-12-01 00:00:00'),
PARTITION pmax VALUES LESS THAN MAXVALUE
);

パーティションを指定してデータを削除するには以下のクエリを実行する。

Alter table log drop partition p20130101;

データはそのままでテーブルのパーティショニングを除去するには以下のクエリを実行する。

ALTER TABLE log REMOVE PARTITIONING;

以下のクエリでパーティションを確認する。

SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='log';