SELECT
*
FROM
information_schema.PARTITIONS
WHERE
PARTITION_NAME IS NOT NULL
ORDER BY
PARTITION_ORDINAL_POSITION;
※テーブルを削除するとinformation_schema.PARTITIONSの情報も自動で削除される
※TABLE_ROWSカラムは後からALTER TABLEすると0になるがレコードはSELECT PARTITION(p0)等で取得できる
RANGE
CREATE TABLE テーブル名 (
...
)
PARTITION BY RANGE
(YEAR(日付カラム)) (
PARTITION 日付カラム_2019 VALUES LESS THAN (2020),
PARTITION 日付カラム_2020 VALUES LESS THAN (2021),
PARTITION 日付カラム_2021 VALUES LESS THAN (2022),
PARTITION 日付カラム_OTHER VALUES LESS THAN (MAXVALUE),
);
ALTER TABLE
テーブル名
REORGANIZE PARTITION
日付カラム_OTHER INTO (
PARTITION 日付カラム_2022 VALUES LESS THAN (2023),
PARTITION 日付カラム_2023 VALUES LESS THAN (2024),
PARTITION 日付カラム_OTHER VALUES LESS THAN (MAXVALUE),
);
LIST
パーティションのVALUES INのいずれにもない場合にはエラーになるので、使わない
HASH
最初からパーティションを作成
CREATE TABLE テーブル名 (
...
)
PARTITION BY
HASH (xxx_id) PARTITIONS 10;
※複数のカラムを含むハッシュ式を使用することはあまり推奨されていない
※ALTER TABLE DROP PARTITIONはできない
パーティションを後から作成
ALTER TABLE
テーブル名
PARTITION BY
HASH(xxx_id) PARTITIONS 10;
RANGE, HASH
CREATE TABLE テーブル名 (
...
)
PARTITION BY
RANGE (YEAR(日付カラム))
SUBPARTITION BY HASH(xxx_id)
SUBPARTITIONS 10 (
PARTITION 日付カラム_2019 VALUES LESS THAN (2020),
PARTITION 日付カラム_2020 VALUES LESS THAN (2021),
PARTITION 日付カラム_OTHER VALUES LESS THAN (MAXVALUE),
);
SELECT
SELECT * FROM テーブル名;
SELECT * FROM テーブル名 PARTITION (p0);