首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 分區表 (PARTITION) 核心技術解析:RANGE/LIST/HASH/KEY 四大類型與管理實戰

     編輯:MySQL 資料庫相關知識

MySQL 5.1+ 支援表分區,邏輯上為單表,物理上將數據文件按規則拆分,對應用透明。分區非真正拆表,而是存儲層切分。

前置檢查

SHOW PLUGINS;  -- partition ACTIVE
SHOW VARIABLES LIKE '%part%';  -- have_partitioning=YES

核心限制

  1. 分區鍵必須包含在主鍵/唯一鍵中 (或不定義主鍵)
  2. 分區欄位 NOT NULL,否則無法確定分區歸屬

四大分區類型

RANGE 分區:連續區間

CREATE TABLE employees (
  id INT NOT NULL, store_id INT NOT NULL,
  PRIMARY KEY (id, store_id)
) ENGINE=MyISAM
PARTITION BY RANGE (store_id) (
  PARTITION p0 VALUES LESS THAN (6),
  PARTITION p1 VALUES LESS THAN (11),
  PARTITION p2 VALUES LESS THAN (16),
  PARTITION p3 VALUES LESS THAN (21)
);

-- 按年份分區 (支援函數)
PARTITION BY RANGE (YEAR(separated)) (
  PARTITION p0 VALUES LESS THAN (2001),
  PARTITION p1 VALUES LESS THAN (2011),
  PARTITION p2 VALUES LESS THAN (2021),
  PARTITION p3 VALUES LESS THAN MAXVALUE
);

LIST 分區:離散值枚舉

PARTITION BY LIST (store_id) (
  PARTITION pNorth VALUES IN (3,5,6,9,17),
  PARTITION pEast  VALUES IN (1,2,10,11,19,20),
  PARTITION pWest  VALUES IN (4,12,13,14,18),
  PARTITION pCentral VALUES IN (7,8,15,16)
);

HASH 分區:均勻分布

PARTITION BY HASH (YEAR(hired)) PARTITIONS 4;

KEY 分區:MySQL 內部哈希

PARTITION BY KEY (col1, col2) PARTITIONS 4;

物理文件驗證

MyISAM 獨立表空間直接可見:

employees.frm      -- 表結構
employees.par      -- 分區定義
employees#P#pNorth.MYD/.MYI  -- 各分區數據/索引

InnoDB 需開啟 innodb_file_per_table=1 才會產生獨立 .ibd 文件。

分區管理 (ALTER TABLE)

操作語法
刪除分區 (數據同步刪除)ALTER TABLE employees DROP PARTITION pWest;
RANGE 新增ALTER TABLE employees ADD PARTITION (PARTITION p4 VALUES LESS THAN (26));
LIST 新增ALTER TABLE employees ADD PARTITION (PARTITION pSouth VALUES IN (21,22,23));
HASH/KEY 重分區ALTER TABLE employees ADD PARTITION PARTITIONS 5;
分區裁剪 (Partition Pruning) 只有當 WHERE 條件包含分區鍵時才生效,EXPLAIN 中 partitions 列顯示實際掃描分區。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved