http://atnd.org/events/28568 の発表内容です。
↓ 実演中に紹介したスクリプト
--------
■新規テーブル作成時
CREATE TABLE `battle_result` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`player_id` varchar(255) NOT NULL,
`opponent_id` varchar(255) NOT NULL,
`result` int(11) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) PARTITION BY RANGE(id) (
PARTITION p01 VALUES LESS THAN (10),
PARTITION p02 VALUES LESS THAN (20),
PARTITION p03 VALUES LESS THAN (30)
);
■既存テーブルにパーティションを追加
ALTER TABLE `battle_result` PARTITION BY RANGE( ID ) (
PARTITION p01 VALUES LESS THAN (10),
PARTITION p02 VALUES LESS THAN (20),
PARTITION p03 VALUES LESS THAN (30)
);
■既存テーブルのパーティションに追加
ALTER TABLE `battle_result` ADD PARTITION (
PARTITION p04 VALUES LESS THAN (40)
);
■(データ追加)
INSERT INTO battle_result ( player_id, opponent_id, result ) values ( '光宙(ぴかちゅう)', '金星(まぁず)', 1);
INSERT INTO battle_result ( player_id, opponent_id, result ) values ( '美俺(びおれ)', '金星(まぁず)', 1);
INSERT INTO battle_result ( player_id, opponent_id, result ) values ( '金星(まぁず)', '黄熊(ぷう)', 0);
INSERT INTO battle_result ( player_id, opponent_id, result ) values ( '月(らいと)', '天空(ありあ)', 1);
INSERT INTO battle_result ( player_id, opponent_id, result ) values ( '光宙(ぴかちゅう)', '金星(まぁず)', 1);
■既存テーブルのパーティションを削除
ALTER TABLE `battle_result` drop PARTITION p01;
■各パーティションの分割状況を確認
SELECT partition_name, table_rows FROM information_schema.partitions WHERE table_name="battle_result";
■SQLの実行計画を確認
EXPLAIN PARTITIONS SELECT * FROM battle_result WHERE opponent_id="金星(まぁず)" ORDER BY id desc LIMIT 5;
EXPLAIN PARTITIONS SELECT * FROM battle_result WHERE id="5";