MySQL 分區完整語法大全:四大類型與變體對比
一、RANGE 分區(范圍分區)
CREATE TABLE employees (
id INT, fname VARCHAR(30), lname VARCHAR(30),
hired DATE, separated DATE, job_code INT, store_id INT
) 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 MAXVALUE
);
- 返回值**必須為整數**
MAXVALUE 可選,捕獲超出範圍數據
- 類似
if ... elseif ... 邏輯
二、RANGE COLUMNS 分區(推薦用於日期/字符串)
CREATE TABLE rcx (
a INT, b INT, c CHAR(3), d INT
) PARTITION BY RANGE COLUMNS(a,d,c) (
PARTITION p0 VALUES LESS THAN (5,10,'ggg'),
PARTITION p1 VALUES LESS THAN (10,20,'mmmm'),
PARTITION p2 VALUES LESS THAN (15,30,'sss'),
PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE)
);
- **不接受表達式,只能是列名**
- 支援**多列**(元組比較)
- 支援
DATE/DATETIME/STRING 類型列
- 區間判斷可用
SELECT (5,10) < (5,12) 驗證
三、LIST 分區(列表分區)
CREATE TABLE employees (...) 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)
);
四、LIST COLUMNS 分區
CREATE TABLE customers_1 (...) PARTITION BY LIST COLUMNS(renewal) (
PARTITION pWeek_1 VALUES IN ('2010-02-01','2010-02-02',...),
PARTITION pWeek_2 VALUES IN ('2010-02-08','2010-02-09',...),
...
);
- 同 RANGE COLUMNS:無表達式、多列、支援日期/字符串
- 多列示例:
PARTITION BY LIST COLUMNS(city,last_name,first_name)
五、HASH 分區(哈希分區)
CREATE TABLE employees (...) PARTITION BY HASH(store_id) PARTITIONS 4;
- 無需定義範圍,**僅指定分區數**
PARTITIONS 可省略 (默認 1),不可單寫不指定數值
- 返回值**必須為整數**
- 底層實現:
MOD(expr, partitions)
六、LINEAR HASH 分區
CREATE TABLE employees (...) PARTITION BY LINEAR HASH(YEAR(hired)) PARTITIONS 4;
- 算法不同:基於 2 的冪次擴展,**增/刪/合併分區更快** (TB 級優勢)
- 缺點:數據分布**不均勻概率更大**
七、KEY 分區
-- 有主鍵/唯一鍵時可省略列
CREATE TABLE k1 (id INT PRIMARY KEY, name VARCHAR(20)) PARTITION BY KEY() PARTITIONS 2;
-- 無主鍵必須指定列
CREATE TABLE tm1 (s1 CHAR(32)) PARTITION BY KEY(s1) PARTITIONS 10;
- 允許**多列**
- 有主鍵/唯一鍵時默認用其列
- 分區鍵**必須為列**,不可為表達式
- 算法:基於列值 **MD5** 哈希
八、LINEAR KEY 分區
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY(col1) PARTITIONS 3;
- 同 LINEAR HASH:分區管理快、分布較不均
九、核心限制總結