首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL KEY 分區詳解:原理、LINEAR KEY 優化、與 HASH 分區差異對比

     編輯:MySQL 綜合教學

核心原理

KEY 分區 類似 HASH 分區,但哈希函數由 MySQL 服務器內部提供:

  • MySQL Cluster (NDB) 使用 `MD5()`。
  • 其他存儲引擎 (InnoDB/MyISAM) 使用基於 `PASSWORD()` 同源的內部哈希算法。
  • **關鍵差異:** KEY 分區**只接受列名列表**,不接受表達式;HASH 分區接受表達式。

基本語法

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY KEY (col1)
PARTITIONS 3;

LINEAR KEY:2 的冪次分區算法

CREATE TABLE tk (
    col1 INT NOT NULL
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;
  • 標準 KEY/HASH:取模算法 `MOD(hash, partitions)`。
  • LINEAR KEY:2 的冪次算法(與 `LINEAR HASH` 同源),分區分佈更均勻,`ADD PARTITION`/`DROP PARTITION` 時數據移動更少。
  • **適用場景:** 分區數較大、頻繁調整分區數量的場景。

KEY vs HASH 詳細對比

維度KEY 分區HASH 分區
哈希函數服務器內部 (MD5/PASSWORD 系)用戶定義表達式
分區鍵僅列名列表 (一或多列)任意有效 SQL 表達式
非整數列支持原生支持 (字符串、日期等)需自行構造表達式返回整數
NULL 值處理允許,NULL 視為單獨值參與哈希表達式結果為 NULL 時行插入失敗
LINEAR 變體支持 LINEAR KEY支持 LINEAR HASH

實戰建議

  1. 優先考慮 KEY 分區當分區鍵為非整數類型(字符串、日期、二進制)時,無需編寫哈希表達式。
  2. 分區數選擇 2 的冪次 (4, 8, 16, 32...) 配合 `LINEAR KEY`,擴容縮容數據重分佈最小化。
  3. 避免過度分區:分區數過多 (>100) 會增加優化器分區裁剪開銷、文件句柄壓力、統計信息收集時間。
  4. 主鍵/唯一鍵限制:分區鍵必須包含在主鍵/唯一鍵中,否則創建表失敗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved