MM 関数は、テーブルデータを暦月単位でパーティション分割します。各テーブルシャードは 1 つの暦月に対応するため、特定の月のデータを削除またはアーカイブする場合、フルテーブルスキャンと削除操作ではなく、単一のシャードレベル操作で済みます。
仕組み
MM は、シャードキーの時間値から月の値(1~12)を抽出し、その値をテーブルシャードの添字として使用します。1月の create_time を持つ行はシャード 1 にルーティングされ、2月の行はシャード 2 にルーティングされ、以下同様です。
適用範囲/利用シーン
クエリパターンが暦月と一致する場合に MM をご使用ください。
月次課金サイクル — 対応するシャードに対して操作を行うことで、月次請求書の生成またはアーカイブを実行できます。
月次レポート — フルテーブルスキャンではなく、単一のシャードに対してクエリを実行できます。
月次データのアーカイブまたは削除 — 単一の DDL 操作で当該月の全シャードを削除でき、行単位の `
DELETE` より高速です。
アクセスパターンが複数月にまたがる場合、または時刻に基づかない場合は、MM の使用は避けてください。そのようなケースでは、ハッシュベースまたはレンジベースのシャーディング関数の方が適しています。
制限事項
| 制約条件 | 詳細 |
|---|---|
| サポートされるパーティション分割キーの型 | DATE、DATETIME、TIMESTAMP |
| 対象範囲 | テーブルシャーディング(tbpartition)のみ — データベースシャーディング(dbpartition)には対応していません。 |
| データベースシャードあたりの最大テーブルシャード数 | 12(月ごとに 1 つ) |
| 最小 PolarDB-X 1.0 バージョン | 5.1.28-1320920 |
例
以下のデータ定義言語(DDL)文は、データベースレベルではユーザー ID で、テーブルレベルでは月でテーブルをシャード分割する構成を定義します。tbpartitions 12 を指定することで、PolarDB-X 1.0 は各暦月ごとに 1 つのテーブルシャードを作成します。
CREATE TABLE test_mm_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition BY HASH(id)
tbpartition BY MM(create_time) tbpartitions 12;