KEY分區與HASH分區類似,也是將資料按照PolarDB-X內建的一致性雜湊演算法進行分區。因此,PolarDB-X的KEY分區的路由演算法與社區MySQL的KEY分區的路由演算法並不相同。
KEY分區與HASH分區的區別在於:
KEY分區可以沒有分區欄位,沒有分區欄位時,預設將主鍵欄位作為分區鍵。如果沒有主鍵欄位時,則按照唯一鍵進行分區;
KEY分區支援多列分區欄位(即向量分區鍵),當KEY分區使用了多分區欄位組成的向量分區鍵進行定義時,預設第1個分區列真正起路由作用;
KEY分區支援INT類型、字元類型、DATE類型、DATETIME類型。
文法
CREATE TABLE ...
PARTITION BY KEY(partition_column_list)
PARTITIONS number;
partition_column_list:
partition_column_list[, partition_column, partition_column, ...]HASH分區策略與KEY分區策略的區別請參見Key分區策略與Hash分區策略對比。
限制
Key分區不支援使用分區函數;
預設最大分區數目不允許超過8192;
預設最大分區列數目不允許超過5個。
樣本
使用單列分區鍵
使用單列分區鍵id按Key分區,並指定分區數目為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按Key分區,並指定分區數目為8。
預設第1個列參與雜湊值計算,查詢帶上首碼分區列等值條件即可命中分區裁剪,後邊的未實際路由生效的分區列,如id,將被用於熱點分裂。
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;相關限制
資料類型限制
整數類型: BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED
時間類型:DATETIME/DATE/TIMESTAMP
字串類型:CHAR/VARCHR/BINARY
定點類型:DECIMAL(小數部分的位元要求必須是0)
資料均勻性
Key分區與Hash分區內建的一致性Hash散列演算法是經過業界廣泛測試的、衝突機率低且效能良好的散列演算法MurmurHash3。
基於MurmurHash3的特性,一般情況下,當分區鍵不同取值的數目N大於3000時,Key分區與Hash分區的資料分布才會相對均衡,且N的值越大,資料分布也將越均衡。