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

PolarDB:RANGE_HASH

最終更新日:Mar 29, 2026

RANGE_HASH は、PolarDB-X 1.0 向けの複合キーによるパーティション分割関数です。データが 2 つのビジネスキーでシャーディングされるが、クエリ実行時にはそのうち 1 つのキーしか利用できない場合に使用します。

仕組み

RANGE_HASH(COL1, COL2, N) は、各レコードをシャードにルーティングする際に、パーティションキーの末尾 N 文字を抽出し、そのハッシュ値をデータベースシャード数で除算した余りを用います。

パラメーター リファレンス

パラメーター説明
COL1文字列または数値主パーティションキー。クエリに含まれている場合は、優先的に選択されます。
COL2文字列または数値代替パーティションキー。クエリに COL1 が含まれていない場合に選択されます。
N整数ハッシュ計算に使用する末尾の文字数。両方のキーはいずれも少なくとも N 文字以上である必要があり、各行について、それぞれの末尾 N 文字が一致している必要があります。

ルーティング ロジック

クエリが到着すると、PolarDB-X 1.0 は以下の順序で利用可能なキーを選択します。

クエリの提供内容ルーティングに使用されるキー
COL1 のみCOL1 — 末尾 N 文字のハッシュ値を計算
COL2 のみCOL2 — 末尾 N 文字のハッシュ値を計算
COL1COL2COL1 — 末尾 N 文字のハッシュ値を計算

すべての場合において、ハッシュ値をシャード数で除算した余りが、対象となるシャードを決定します。

制限事項

  • COL1COL2 は、同一のデータの型(文字列または数値)である必要があります。

  • テーブル作成後に、いずれかのパーティションキーを変更することはできません。

  • パーティションキーに対する範囲クエリはサポートされていません。

  • データ挿入時に、N 文字の末尾部分について、COL1COL2 の値が一致している必要があります。

  • 文字列値は、少なくとも N 文字の長さである必要があります。

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

以下のデータ定義言語 (DDL) 文は、8 個の物理データベースシャードを持つ PolarDB-X 1.0 クラスター内に注文テーブルを作成します。注文は buyer_id および order_id でシャーディングされますが、クエリではこれらの ID のいずれか 1 つだけが指定される可能性があります。

CREATE TABLE test_order_tb (
    id          INT,
    buyer_id    VARCHAR(30) DEFAULT NULL,
    order_id    VARCHAR(30) DEFAULT NULL,
    create_time DATETIME    DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  dbpartition  BY RANGE_HASH(buyer_id, order_id, 10)
  tbpartition  BY RANGE_HASH(buyer_id, order_id, 10) tbpartitions 3;

N = 10 の場合、PolarDB-X 1.0 は、クエリで指定されたキーの末尾 10 文字からハッシュ値を計算します。挿入時に各ペアの末尾 10 文字が一致していれば、buyer_id をフィルター条件とするクエリと、order_id をフィルター条件とするクエリのいずれも、単一のシャードにルーティングされます。