KEY vs HASH 分區
| 特性 | HASH 分區 | KEY 分區 |
| 哈希函數 | 用戶自定義表達式(如 HASH(YEAR(date))) | MySQL 內建(NDB 用 MD5,其他引擎基於 PASSWORD() 算法) |
| 分區鍵 | 運算式 | **一或多個列名列表** |
| 線性選項 | LINEAR HASH | LINEAR KEY |
基本語法
CREATE TABLE tk (
col1 INT NOT NULL,
col2 CHAR(5),
col3 DATE
)
PARTITION BY KEY (col1)
PARTITIONS 3;
線性 KEY 分區
CREATE TABLE tk (
col1 INT NOT NULL,
col2 CHAR(5),
col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;
- 標準 KEY:模數算法
N % partitions。
- LINEAR KEY:2 的冪次算法(
2^n),分區分裂/合併時資料移動更少,適合頻繁 REORGANIZE PARTITION 場景。
適用場景
- 無明顯範圍/枚舉特徵,需**自動均勻分佈**的大表。
- 分區鍵為複合列(如
KEY(shop_id, user_id)),內建哈希自動混合多列。
- NDB Cluster 表預設推薦 KEY 分區(MD5 散列均勻度高)。
- 避免手寫哈希表達式出錯,交給內核保證確定性與跨版本一致。
限制與注意
- 分區鍵列必須為
NOT NULL(或含預設值)。
- 不支援
VALUES LESS THAN / VALUES IN 子句。
- 5.1 版本 KEY 分區僅支援整數類型列,5.5+ 支援任意類型(內部轉換)。
- 主鍵/唯一鍵必須包含分區鍵所有列,否則報錯。