22.3 分区 Management
MySQL 5.7 提供了多种修改分区 table 的方法。可以添加,删除,重新定义,合并或拆分现有分区。所有这些动作都可以使用ALTER TABLE语句的分区扩展来执行。还有一些方法可以获取有关分区 table 和分区的信息。我们将在以下各节中讨论这些主题。
-
有关用
RANGE
或LIST
分区的 table 中分区 Management 的信息,请参见第 22.3.1 节“ManagementRANGE 和 LIST 分区”。 -
有关 Management
HASH
和KEY
分区的讨论,请参见第 22.3.2 节“ HASH 和密钥分区的 Management”。 -
有关获取 MySQL 5.7 中提供的有关分区 table 和分区信息的机制的讨论,请参见第 22.3.5 节“获取有关分区的信息”。
-
有关在分区上执行维护操作的讨论,请参见第 22.3.4 节“分区维护”。
Note
在 MySQL 5.7 中,分区 table 的所有分区必须具有相同数量的子分区,并且一旦创建了 table,就无法更改子分区。
要更改 table 的分区方案,只需要使用带有* partition_options
*子句的ALTER TABLE语句。此子句的语法与用于创建分区 table 的CREATE TABLE相同,并且始终以关键字PARTITION BY
开头。假设您具有使用以下CREATE TABLE语句按范围划分的 table:
CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
要对该 table 重新分区,以便使用id
列值作为键的基础,通过键将其分为两个分区,可以使用以下语句:
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
这对 table 的结构具有与删除 table 并使用CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
重新创建 table 相同的作用。
ALTER TABLE ... ENGINE = ...
仅更改 table 使用的存储引擎,并保留 table 的分区方案不变。使用ALTER TABLE ... REMOVE PARTITIONING
删除 table 的分区。参见第 13.1.8 节“ ALTER TABLE 语句”。
Important
在给定的ALTER TABLE语句中,只能使用单个PARTITION BY
,ADD PARTITION
,DROP PARTITION
,REORGANIZE PARTITION
或COALESCE PARTITION
子句。如果(例如)希望删除分区并重组 table 的其余分区,则必须在两个单独的ALTER TABLE语句中进行(一个使用DROP PARTITION
,然后使用REORGANIZE PARTITION
)。
在 MySQL 5.7 中,可以使用ALTER TABLE ...截断分区删除一个或多个选定分区中的所有行。