次のように、既存のテーブルを変更して、年と週のサブパーティションを追加しようとしています。
CREATE TABLE test_table(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
dtime DATETIME NOT NULL);
ALTER TABLE test_table
PARTITION BY RANGE ( YEAR(dtime) )
SUBPARTITION BY RANGE( WEEK(dtime) ) (
PARTITION y0 VALUES LESS THAN (2013) (
SUBPARTITION w0 VALUES LESS THAN (2),
...
SUBPARTITION w52 VALUES LESS THAN (54)
),
PARTITION y1 VALUES LESS THAN (2014) (
SUBPARTITION w0 VALUES LESS THAN (2),
...
SUBPARTITION w52 VALUES LESS THAN (54)
),
PARTITION y2 VALUES LESS THAN (2015) (
SUBPARTITION w0 VALUES LESS THAN (2),
...
SUBPARTITION w52 VALUES LESS THAN (54)
),
PARTITION y3 VALUES LESS THAN (2016) (
SUBPARTITION w0 VALUES LESS THAN (2),
...
SUBPARTITION w52 VALUES LESS THAN (54)
)
);
ただし、これにより、次のような漠然とした役に立たない応答が得られます。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RANGE( WEEK(DTIME) ) (
PARTITION y0 VALUES LESS THAN (2013) (
SUBPARTITION ' at line 3
ドキュメントを確認しました: MySQL ALTER TABLE Partition operationsおよびMySQL RANGE and LIST Partitions。ただし、どちらもテーブルを変更してサブパーティションを作成する方法については説明していません。
私の質問の 2 番目の部分は、このパーティショニング スキームに関するフィードバックです。これに入るデータは、毎分記録されるセンサーの読み取り値であり、最も一般的なクエリ操作は先週のデータに対するものです。「WHERE dtime > date」は非常に一般的であるため、定期的にテーブルからデータをアーカイブテーブルに手動で移動する必要がないため、これによりクエリが大幅に高速化されるはずです。