分區表上線後,業務增長必然面臨分區新增、刪除、合併、拆分等維護需求。本文聚焦 RANGE/LIST 分區,系統講解 DROP、TRUNCATE、ADD、REORGANIZE 核心操作與避坑指南。
CREATE TABLE members (
id INT,
fname VARCHAR(25),
lname VARCHAR(25),
dob DATE
)
PARTITION BY RANGE( YEAR(dob) ) (
PARTITION p0 VALUES LESS THAN (1970),
PARTITION p1 VALUES LESS THAN (1980),
PARTITION p2 VALUES LESS THAN (1990)
);
ALTER TABLE members DROP PARTITION p1;
影響:
SHOW CREATE TABLE 不再顯示該分區定義後續插入行為差異:
ALTER TABLE members TRUNCATE PARTITION p1;
ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));
限制:ADD PARTITION **僅能在分區列表末尾新增**,本例中只能加在 1990 年之後。
突破「僅能尾部新增」限制,支援拆分、合併、區間調整。
ALTER TABLE members REORGANIZE PARTITION p0 INTO (
PARTITION s0 VALUES LESS THAN (1960),
PARTITION s1 VALUES LESS THAN (1970)
);
原 p0 (<1970) 拆為 s0 (<1960) + s1 (<1970)。
ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (
PARTITION m0 VALUES LESS THAN (1980),
PARTITION m1 VALUES LESS THAN (2000)
);
ALTER TABLE ... PARTITION BY HASH(...) 重建表partition_definitions 範圍並集必須包含 partition_list 所有值ALTER TABLE tbl REORGANIZE PARTITION partition_list INTO (partition_definitions);不支援 DROP/TRUNCATE/REORGANIZE 單個分區,僅支援整體數量調整:
-- 減少 4 個分區 (12→8) ALTER TABLE clients COALESCE PARTITION 4; -- 增加 6 個分區 (12→18) ALTER TABLE clients ADD PARTITION PARTITIONS 6;
掌握 REORGANIZE,即可應對 90% 分區結構變更場景,避免大表重建停機風險。