自然なパーティションキーが文字列、日付、または複合列である場合に、KEY パーティショニングを使用します。整数式を必要とする HASH パーティショニングとは異なり、KEY パーティショニングは非整数型の列および複数列から構成されるパーティションキーをサポートするため、実際の業務で使用されるスキーマの多くに適しています。
PolarDB-X における KEY パーティショニングのルーティングアルゴリズムには MurmurHash3 が採用されており、これは MySQL の KEY パーティショニングアルゴリズムとは異なります。
KEY パーティショニングと HASH パーティショニングの違い
| 動作 | KEY パーティショニング | HASH パーティショニング |
|---|---|---|
| パーティションキーの指定必須 | いいえ — パーティションキーを省略した場合、デフォルトでプライマリキーが使用されます。プライマリキーが存在しない場合は、一意キーが使用されます | はい — 整数式または整数型の列を明示的に指定する必要があります |
| 複数列のパーティションキー | サポート(ベクターパーティションキー) | サポートされません |
| サポートされるデータの型 | INT、STRING、DATE、DATETIME(およびそのサブタイプ) | 整数型のみ |
| パーティショニング関数 | サポートされません | サポートされます |
詳細な比較については、「KEY パーティショニングと HASH パーティショニングの比較」をご参照ください。
構文
CREATE TABLE ...
PARTITION BY KEY(partition_column_list)
PARTITIONS number;
partition_column_list:
column_name [, column_name ...]| パラメーター | 説明 |
|---|---|
partition_column_list | パーティションキーとして使用する 1 つ以上の列です。省略した場合は、デフォルトでプライマリキーが使用されます。プライマリキーが存在しない場合は、一意キーが使用されます。 |
number | パーティション数です。最大値:8,192。 |
例
単一列のパーティションキー
id 列をパーティションキーとして、8 つのパーティションに分割します:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(id)
PARTITIONS 8;ベクターパーティションキー(複数列)
bid および id を 2 列のパーティションキーとして使用し、8 つのパーティションに分割します:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(bid, id)
PARTITIONS 8;ベクターパーティションキーでは、行のルーティング先パーティションは先頭の列(本例では bid)のみによって決定されます。id などの残りの列はルーティングには使用されず、ホットデータのパーティション分割を支援するために存在します。クエリに先頭列(bid)に対する等価条件が含まれる場合、パーティションプルーニングが適用されます。
制限事項
サポートされるデータの型
| カテゴリ | 型 |
|---|---|
| 整数 | BIGINT、BIGINT UNSIGNED、INT、INT UNSIGNED、MEDIUMINT、MEDIUMINT UNSIGNED、SMALLINT、SMALLINT UNSIGNED、TINYINT、TINYINT UNSIGNED |
| 日付および時刻 | DATETIME、DATE、TIMESTAMP |
| 文字列 | CHAR、VARCHAR、BINARY |
| 固定小数点 | DECIMAL(小数部の桁数は 0 である必要があります) |
その他の制限
KEY パーティショニングでは、パーティショニング関数はサポートされません。
デフォルトでは、パーティションテーブルのパーティション数は最大 8,192 までです。
デフォルトでは、パーティションキーに含められる列数は最大 5 列までです。
データのディストリビューション
KEY パーティショニングは、ハッシュ衝突率が低く高性能な MurmurHash3 を使用します。パーティションキーが 3,000 を超える一意の値を持つ場合、パーティション全体へのディストリビューションは均等になります。一意の値が多いほど、ディストリビューションはより均等になります。