mysql5.1のパーティショニングを使う
mysql5.1の新機能であるパーティショニング(PARTITIONING)を使ってみたので使い方やら注意点やらまとめ。
最初にパーティションの区切りの基準になるカラムはプライマリキーじゃないといけないという制約があるのでプライマリキーを変更する。
ALTER TABLE entries DROP PRIMARY KEY, ADD PRIMARY KEY (id, blog_id);
実際にパーティションに分割する
ピンポイント数値で分割
ALTER TABLE entries PARTITION BY LIST (blog_id) ( PARTITION p1 VALUES IN (1,3,7), PARTITION p2 VALUES IN (10,11) );
数値範囲で分割
ALTER TABLE entries PARTITION BY RANGE (blog_id) ( PARTITION p1 VALUES LESS THAN 3, PARTITION p2 VALUES LESS THAN 10, PARTITION p_max VALUES LESS THAN MAXVALUE );
日付(DATE, DATETIME)の年で分割
ALTER TABLE entries PARTITION BY LIST (YEAR(updated_at)) ( PARTITION p2007 VALUES IN (2007), PARTITION p2008 VALUES IN (2008) );
日付(DATE, DATETIME)の月で分割
ALTER TABLE entries PARTITION BY RANGE (TO_DAYS(updated_at)) ( PARTITION p200804 VALUES LESS THAN (TO_DAYS('2008-05-01')), PARTITION p200805 VALUES LESS THAN (TO_DAYS('2008-06-01')), PARTITION p200806 VALUES LESS THAN (TO_DAYS('2008-07-01')) );
パーティションを追加する
ALTER TABLE entries ADD PARTITION (PARTITION p3 VALUES LESS THAN 100));
注意:RANGE分割でMAXVALUEを使っている場合に、ADD PARTITION をするとそのテーブルの操作が一切できなくなります。(5.1.23-rc で確認)
パーティショニング(分割)をやめる
ALTER TABLE entries REMOVE PARTITIONING;