官方文档:https://dev.mysql.com/doc/refman/8.0/en/partitioning-management.html
创建分区表
CREATE TABLE e (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30)
)
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (50),
PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (150),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
查看数据分区
-rw-r-----. 1 mysql mysql 8620 Jul 30 23:03 e.frm
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:06 e#P#p0.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:06 e#P#p1.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:06 e#P#p2.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:06 e#P#p3.ibd
添加数据并查看
INSERT INTO e VALUES
(1, "Jim", "Smith"),
(51, "Mary", "Jones"),
(101, "Frank", "White"),
(151, "Linda", "Black");
SELECT * from e;
移除分区
ALTER TABLE e REMOVE PARTITIONING;
查看分区文件以及数据,数据未变。
-rw-r-----. 1 mysql mysql 8620 Jul 30 23:13 e.frm
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:13 e.ibd
重新添加分区
ALTER TABLE e PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (50),
PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (150),
PARTITION p3 VALUES LESS THAN (200),
PARTITION p4 VALUES LESS THAN (MAXVALUE)
);
查看分区文件
-rw-r-----. 1 mysql mysql 8620 Jul 30 23:24 e.frm
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:24 e#P#p0.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:24 e#P#p1.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:24 e#P#p2.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:24 e#P#p3.ibd
-rw-r-----. 1 mysql mysql 98304 Jul 30 23:24 e#P#p4.ibd
移除单个分区(重新分区尽量用ALTER TABLE ... REORGANIZE PARTITION代替)
这个命令会直接删除这个分区以及分区的数据,当数据量太大时,可以先备份冷数据,然后再移除分区
ALTER TABLE e DROP PARTITION p2;
将最后一个分区扩展为两个分区
ALTER TABLE e
REORGANIZE PARTITION p4 INTO (
PARTITION p4 VALUES LESS THAN (300),
PARTITION p5 VALUES LESS THAN (MAXVALUE)
);