| 策略 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 分表 | 提高並發、縮小鎖粒度 | 代碼改動大、維護成本高 | 極高並發、業務明確可拆分 |
| 分區 | 代碼幾乎無改動、提升 I/O 吞吐 | 並發度未提升、有諸多限制 | 單表巨大、按範圍查詢/清理、修改較少 |
| 業務拆分 | 長期架構乾淨 | 重構工作量極大 | 微服務化改造 |
SHOW PLUGINS; -- partition | ACTIVE | STORAGE ENGINE 表示可用
CREATE TABLE T_part (
f_id INT, f_name VARCHAR(20), PRIMARY KEY (f_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
PARTITION BY RANGE (f_id) (
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (20)
);
注意:`f_id >= 20` 的資料將無法寫入(報錯),實務上最後一個分區常用 `MAXVALUE` 兜底。
-- 新增分區 ALTER TABLE T_part ADD PARTITION (PARTITION p2 VALUES LESS THAN (MAXVALUE)); -- 刪除分區(資料同步刪除,謹慎操作) ALTER TABLE T_part DROP PARTITION p2;
CREATE TABLE T_part (...)
PARTITION BY RANGE (f_id)
SUBPARTITION BY HASH (f_id) SUBPARTITIONS 2 (
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (20)
);
可將不同子分區映射至不同磁碟目錄(`DATA DIRECTORY` / `INDEX DIRECTORY`),實現物理 I/O 隔離。
查詢 WHERE 條件必須包含分區鍵,優化器才能跳過無關分區。否則退化為全分區掃描(類似合併表),大表上極慢。
分區表是「低代碼侵入」的大表優化利器,核心價值在於 **I/O 隔離、快速歸檔清理、分區修剪加速查詢**。適用於「寫入較少、按時間/範圍查詢、需定期清理歷史資料」的場景(如日誌、流水、統計表)。生產上線前務必用 `EXPLAIN PARTITIONS` 驗證執行計畫。