ハッシュパーティショニングは、パーティションキーから導出される式に剰余演算を適用することで、行を複数のパーティションに分散します。範囲条件やリスト条件を必要とせず、固定数のパーティションにデータを均等に分散させる場合に使用します。
構文
CREATE TABLE ... PARTITION BY [LINEAR] HASH(expr) [PARTITIONS number]
( PARTITION partition_name1,
PARTITION partition_name2, ...);パラメーター
| パラメーター | 説明 |
|---|---|
expr | パーティション式です。INT 型の値を返す必要があります。文字列型はサポートされていません。 |
number | ハッシュパーティションの数です。 |
partition_name | パーティション名です。テーブル内で一意である必要があります。 |
仕組み
各行がどのパーティションに属するかを決定するために、PolarDB はパーティション式を評価し、以下の数式を適用します:
MOD(partition_expression, number_of_partitions)たとえば、パーティション数が 7 で、パーティション式の値が 15 の場合、その行はパーティション MOD(15, 7) = 1 に割り当てられます。
HASH と LINEAR HASH の比較
PolarDB では、2 種類のハッシュパーティショニング方式がサポートされています。
| HASH | LINEAR HASH | |
|---|---|---|
| アルゴリズム | ハッシュ関数値の剰余演算 | 線形・2 次・指数関数的アルゴリズム |
構文上の唯一の違いは、LINEAR キーワードが PARTITION BY 句に含まれるかどうかです。
例
ハッシュパーティションテーブルの作成
CREATE TABLE sales_hash
(
s_id INT,
dept_no INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY HASH (s_id)
PARTITIONS 7;このコマンドにより、7 つのパーティションを持つ sales_hash テーブルが作成されます。各行は MOD(s_id, 7) に基づいてパーティションに割り当てられます。
LINEAR HASH パーティションテーブルの作成
CREATE TABLE sales_linear_hash
(
s_id INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY LINEAR HASH (s_id)
PARTITIONS 7;このコマンドにより、7 つのパーティションを持つ sales_linear_hash テーブルが作成され、パーティションメンテナンスを高速化するための線形・2 次・指数関数的アルゴリズムが適用されます。