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

PolarDB:MMDD

最終更新日:Mar 29, 2026

MMDD は、PolarDB-X 1.0 において、大規模なテーブルをカレンダー日単位でテーブルシャードに分割する関数です。各テーブルシャード名の添字は、2 桁の月(MM)と 2 桁の日(DD)からなる MMDD 形式で表され、特定の日付を示します。

仕組み

MMDD は、パーティションキーの値から月と日の部分を抽出し、その値に基づいてテーブルシャードの添字を決定します。create_time2024-03-15 の行は、テーブルシャード 0315 にマップされ、3 月 15 日を表すシャードに配置されます。

MMDD は年間の日付単位でルーティングを行うため、各データベースシャードには最大 366 個のテーブルシャード(1 年間の最大日数である 366 日分)が格納されます。

制限事項

制約詳細
サポートされるデータの型DATEDATETIME、または TIMESTAMP
シャーディング範囲テーブルシャーディングのみ — データベースシャーディングには使用できません
データベースシャードあたりの最大テーブルシャード数366(カレンダー上の各日付に対応する 1 つ — 1 年間の最大日数は 366 日)
最小バージョンPolarDB-X 1.0 インスタンス バージョン 5.1.28-1320920 以降

適用範囲/利用シーン

年間の日付単位で大規模なテーブルをパーティション化し、クエリパターンが特定のカレンダー日付と一致する場合に、MMDD を使用してください。テーブルシャードの添字はカレンダー日付を直接表すため、日付ベースの範囲クエリが効率的になります。

MMDD は以下の用途には適していません。

  • データベースシャーディングMMDD はテーブルシャーディングでのみ動作します。

  • 日付に関係なく均等なデータ分散 — データ量が日付によって大きく変動する場合(例:平日はトラフィックが集中し、週末は少ない)、MMDD ではシャードサイズが不均等になります。均一な分散が必要な場合は、ハッシュベースの関数をご利用ください。

MMDD シャーディングによるテーブル作成

以下のデータ定義言語(DDL)の例では、ユーザー名(ハッシュ)に基づいてデータをデータベースシャードに分割し、MMDD 関数を create_time 列に適用してテーブルシャードに分割しています。

CREATE TABLE test_mmdd_tb (
    id          INT,
    name        VARCHAR(30)  DEFAULT NULL,
    create_time DATETIME     DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
  dbpartition  BY HASH(name)
  tbpartition  BY MMDD(create_time) tbpartitions 366;
  -- 366 個の tbpartitions:カレンダー上の各日付に対応(1 年間の最大日数は 366 日)

主なパラメーター:

パラメーター説明
dbpartition byHASH(name)name 列の値をハッシュ化し、その結果に基づいて行をデータベースシャード間で分散します
tbpartition byMMDD(create_time)create_time
tbpartitions366データベースシャードあたりのテーブルシャード数 — 1 年間のすべてのカレンダー日付を網羅するために 366 を指定します