すべてのプロダクト
Search
ドキュメントセンター

PolarDB:MM

最終更新日:Mar 29, 2026

MM 関数は、テーブルデータを暦月単位でパーティション分割します。各テーブルシャードは 1 つの暦月に対応するため、特定の月のデータを削除またはアーカイブする場合、フルテーブルスキャンと削除操作ではなく、単一のシャードレベル操作で済みます。

仕組み

MM は、シャードキーの時間値から月の値(1~12)を抽出し、その値をテーブルシャードの添字として使用します。1月の create_time を持つ行はシャード 1 にルーティングされ、2月の行はシャード 2 にルーティングされ、以下同様です。

適用範囲/利用シーン

クエリパターンが暦月と一致する場合に MM をご使用ください。

  • 月次課金サイクル — 対応するシャードに対して操作を行うことで、月次請求書の生成またはアーカイブを実行できます。

  • 月次レポート — フルテーブルスキャンではなく、単一のシャードに対してクエリを実行できます。

  • 月次データのアーカイブまたは削除 — 単一の DDL 操作で当該月の全シャードを削除でき、行単位の `DELETE` より高速です。

アクセスパターンが複数月にまたがる場合、または時刻に基づかない場合は、MM の使用は避けてください。そのようなケースでは、ハッシュベースまたはレンジベースのシャーディング関数の方が適しています。

制限事項

制約条件詳細
サポートされるパーティション分割キーの型DATEDATETIMETIMESTAMP
対象範囲テーブルシャーディング(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;