萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL KEY 分區:內建哈希函數實現資料均勻分佈

KEY vs HASH 分區

特性HASH 分區KEY 分區
哈希函數用戶自定義表達式(如 HASH(YEAR(date)))MySQL 內建(NDB 用 MD5,其他引擎基於 PASSWORD() 算法)
分區鍵運算式**一或多個列名列表**
線性選項LINEAR HASHLINEAR 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 場景。

適用場景

  1. 無明顯範圍/枚舉特徵,需**自動均勻分佈**的大表。
  2. 分區鍵為複合列(如 KEY(shop_id, user_id)),內建哈希自動混合多列。
  3. NDB Cluster 表預設推薦 KEY 分區(MD5 散列均勻度高)。
  4. 避免手寫哈希表達式出錯,交給內核保證確定性與跨版本一致。

限制與注意

  • 分區鍵列必須為 NOT NULL(或含預設值)。
  • 不支援 VALUES LESS THAN / VALUES IN 子句。
  • 5.1 版本 KEY 分區僅支援整數類型列,5.5+ 支援任意類型(內部轉換)。
  • 主鍵/唯一鍵必須包含分區鍵所有列,否則報錯。
copyright © 萬盛學電腦網 all rights reserved