全部產品
Search
文件中心

:KEY分區

更新時間:Jul 06, 2024

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的值越大,資料分布也將越均衡。