| 維度 | 分表 | 分區 |
|---|---|---|
| 本質 | 邏輯上將一張大表拆分為多張獨立物理表 | 物理層面將數據按規則劃分為多個區段,邏輯上仍是單表 |
| 文件結構 | 每張子表擁有獨立 .frm/.MYD/.MYI 文件 | 共享 .frm,數據/索引文件按分區劃分,額外產生 .par 元數據文件 |
| 透明性 | 應用層通常需感知路由邏輯(除 MERGE 引擎) | 對應用完全透明,SQL 無需修改 |
CREATE TABLE alluser (
id INT, name VARCHAR(50)
) ENGINE=MRG_MYISAM UNION=(user1,user2) INSERT_METHOD=LAST;
-- 子表獨立存在
CREATE TABLE user1 (id INT, name VARCHAR(50)) ENGINE=MyISAM;
CREATE TABLE user2 (id INT, name VARCHAR(50)) ENGINE=MyISAM;
alluser.MRG 僅存儲子表映射關係與插入策略,本身不存數據。
CREATE TABLE aa (
id INT, created DATE
) ENGINE=InnoDB
PARTITION BY RANGE (YEAR(created)) (
PARTITION p1 VALUES LESS THAN (2020),
PARTITION p2 VALUES LESS THAN (2021),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
查看 aa.par 可見分區定義元數據。
| 場景 | 推薦策略 |
|---|---|
| 高並發訪問、數據量大 | 分表 + 分區結合(注意 MERGE 不支持分區,需選用其他分表方案) |
| 訪問量一般、歷史數據歸檔 | 單純分區(按時間 RANGE/LIST) |
| 需跨庫/跨實例水平擴展 | 分表(Sharding) |
MERGE 分表與分區難度相近,對代碼透明;其他分表方案(中間件/應用路由)複雜度顯著高於分區。