とりあえずアバウトにmemo。
やりたいこと。
drop table session_test; create table session_test ( session_id varbinary(256) not null, use_id varbinary(64) not null, data blob, insert_date datetime, update_date datetime, PRIMARY KEY (session_id) ) ENGINE=InnoDB PARTITION BY RANGE ( hour(update_date) ) ( PARTITION p00 VALUES less than(0), PARTITION p01 VALUES less than(1), PARTITION p02 VALUES less than(2), PARTITION p03 VALUES less than(3), . . . PARTITION p23 VALUES less than(23), PARTITION pmax VALUES LESS THAN MAXVALUE );
んで、バッチで
DROP PARTITION p(二時間前);
ってやりたいげ。
で…現実。
まずそもそもとして
「A PRIMARY KEY must include all columns in the table's partitioning function」
って怒られる orz
だって「レンジの値はど〜したってPKぢゃねぇもん;;」
&
update_dateが15:59:00から16:00:00にupdateされた時って、ちゃんと動くのかしらん?
いやまぁ「PKだからうごかねぇよ!」って前提条件は置いておくとして。
# 一説によると*1これはちゃんと対応してるぽ…それだけになおのこと「PK縛り」が残念にすぎる orz
ちなみに、本気でやると、パーティションの設定部分が多分
PARTITION p00 VALUES IN (0,3,6, 9,12,15,18,21), PARTITION p01 VALUES IN (1,4,7,10,13,16,19,22), PARTITION p02 VALUES IN (2,5,8,11,14,17,20,23), PARTITION pmax VALUES LESS THAN MAXVALUE
ってなる。「今必要なパーティション」「念のために寝かせておくパーティション」「dropするパーティション」があれば十分なはずだしね。
さて…こんな風に使える日はくるのか!?