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

PolarDB:分割関数の概要

最終更新日:Mar 28, 2026

PolarDB-X 1.0 は、データベースシャーディングおよびテーブルシャーディングの両方をサポートするデータベースサービスです。本トピックでは、PolarDB-X 1.0 のシャーディング機能について説明します。

シャーディング方法

PolarDB-X 1.0 において、シャーディング方法とは、論理テーブルをどのように分割するかを定義するものです。この方法では、シャーディング関数とシャードキーを使用します。シャーディング関数には、シャード数とルーティングアルゴリズムが含まれます。シャードキーには MySQL のデータの型が指定されます。データベースシャーディングとテーブルシャーディングが同一の関数およびキーを使用する場合にのみ、両者は整合性を保ちます。この整合性により、PolarDB-X 1.0 は、シャードキーの値を用いて一意の物理データベースおよび物理テーブルを特定できます。データベースシャーディングとテーブルシャーディングの方法が異なる場合、PolarDB-X 1.0 はフルスキャンを実行します。つまり、すべてのデータベースまたはすべてのテーブルをスキャンします。これは、PolarDB-X 1.0 のクエリで、両方の条件が指定されていない場合に発生します。

データベースシャーディングおよびテーブルシャーディングの対応状況

シャーディング関数説明データベースシャーディングに対応していますか?テーブルシャーディングをサポート
HASH単純な剰余演算はいはい
STR_HASH文字列から部分文字列を抽出はいはい
UNI_HASH単純な剰余演算はいはい
RIGHT_SHIFT数値を右シフトはいはい
RANGE_HASH2 つのシャードカラムに対するハッシュ処理はいはい
MM月単位のハッシュ処理いいえはい
DD日単位のハッシュ処理いいえはい
WEEK週単位のハッシュ処理いいえはい
MMDD月および日に基づくハッシュ処理いいえはい
YYYYMM年および月に基づくハッシュ処理はいはい
YYYYWEEK年および週に基づくハッシュ処理はいはい
YYYYDD年および日に基づくハッシュ処理はいはい

グローバルセカンダリインデックスにおける分割関数の対応状況

  • PolarDB-X 1.0グローバルセカンダリインデックスグローバルセカンダリインデックス (GSI) をサポートします。データストレージの観点から、各 GSI はインデックスデータを格納する論理テーブルに対応し、このテーブルを「インデックステーブル」と呼びます。
  • PolarDB-X 1.0 では、GSI を作成する際に、インデックステーブルのシャーディング方法を指定できます。サポートされるシャーディング関数は、通常の論理テーブルと同一です。GSI の作成構文の詳細については、「グローバルセカンダリインデックスの使用」をご参照ください。

分割関数のデータの型対応状況

シャーディング関数データの型
INTBIGINTMEDIUMINTSMALLINTTINYINTVARCHARCHARDATEDATETIMETIMESTAMPその他の型
HASH××××
UNI_HASH××××
RANGE_HASH××××
RIGHT_SHIFT××××××
STR_HASH×××××××××
MM××××××××
DD××××××××
WEEK××××××××
MMDD××××××××
YYYYMM××××××××
YYYYWEEK××××××××
YYYYDD××××××××

シャーディング関数の構文

PolarDB-X 1.0 は、MySQL の DDL テーブル操作構文と互換があり、drds_partition_options シャーディングキーワードを追加しています。構文は次のとおりです:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [drds_partition_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [drds_partition_options]
    [partition_options]
    select_statement

drds_partition_options:
    DBPARTITION BY
        { {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
        [TBPARTITION BY
            { {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
          [TBPARTITIONS num]
        ]