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

PolarDB:YYYYMM

最終更新日:Mar 29, 2026

YYYYMM は PolarDB-X 1.0 のパーティショニング関数であり、日付型カラムの年と月に基づいて、データをデータベースシャードとテーブルシャードに分散させます。

仕組み

YYYYMM は、パーティショニングキーの年と月からハッシュ値を計算し、モジュロ演算を使用してレコードをデータベースシャードに分散させます。

hash value = (year × 12 + month) % D

ここで、D はデータベースシャードの数です。

例えば、YYYYMM('2012-12-31 12:12:12')(2012 × 12 + 12) % D と評価され、レコードは 2012 年 12 月に対応するシャードにルーティングされます。

制限事項

  • パーティショニングキーは、DATE 型、DATETIME 型、または TIMESTAMP 型である必要があります。

  • テーブルを作成する前に、物理テーブルシャードの総数を決定する必要があります。この数は、周期 (例えば 2 年) に基づいて決定します。YYYYMM は、周期内で 1 ヶ月あたり 1 つのテーブルシャードを割り当てます。

  • 周期が完了すると、月が再帰し、データは前の周期と同じシャードにルーティングされます。例えば、2012 年 3 月に開始する 2 年周期の場合、2014 年 3 月のデータは 2012 年 3 月のデータと同じテーブルシャードにルーティングされます。データがルーティングされる特定のテーブルシャードは、テーブルシャードの数に依存します。

  • PolarDB-X 1.0 バージョン 5.1.28-1320920 以降が必要です。

YYYYMM によるパーティションテーブルの作成

次の例では、2 年周期で 1 ヶ月あたり 1 つのテーブルシャードを持つテーブルを作成し、8 つのデータベースシャードに年と月でデータを分散させます。

シャード計画:

要素計算
サイクルの長さ2 年
必要なテーブルシャード数2412 ヶ月 × 2 年
データベースシャード8
データベースシャードあたりのテーブルシャード数324 ÷ 8

tbpartitions 3 を使用して、データベースシャードごとに 3 つのテーブルシャードを作成します。

create table test_yyyymm_tb (
        id int,
        name varchar(30) DEFAULT NULL,
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by YYYYMM(create_time)
tbpartition by YYYYMM(create_time) tbpartitions 3;

create_time でフィルターするクエリは、データベースシャード内のターゲットテーブルシャードに直接ルーティングされるため、フルテーブルスキャンを回避できます。

ユースケース

YYYYMM は、注文レコード、ログテーブル、課金データなど、レコードが暦月ごとに自然にグループ化されるデータセットに適しています。dbpartition by YYYYMM(ShardKey)tbpartition by YYYYMM(ShardKey) を併用することで、データベースシャードとテーブルシャードの両方のレベルでデータを分散させ、月ベースのクエリで正確なシングルシャードルーティングを有効にできます。