26.3 分区管理
使用 SQL 语句可以修改分区表;通过分区扩展对 ALTER TABLE
语句,可以添加、删除、重新定义、合并或拆分现有分区。还可以通过 SQL 语句获取有关分区表和分区的信息。我们在接下来的部分讨论这些主题。
-
要了解关于使用
RANGE
或LIST
分区管理的信息,请参阅第 26.3.1 节,“RANGE 和 LIST 分区的管理”。 -
要了解关于管理
HASH
和KEY
分区的信息,请参阅第 26.3.2 节,“HASH 和 KEY 分区的管理”。 -
要了解如何获取有关分区表和分区的信息,请参阅第 26.3.5 节,“获取关于分区的信息”。
-
要了解如何对分区执行维护操作,请参阅第 26.3.4 节,“分区的维护”。
所有一个分区表的分区必须具有相同数量的子分区;一旦表被创建,就不能改变子分区结构。
要更改表的分区方案,只需使用带有 partition_options
选项的 ALTER TABLE
语句,该选项具有与用于创建分区表的 CREATE TABLE
语句相同的语法;该选项始终以关键字 PARTITION BY
开头。假设以下 CREATE 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)
);
要将这个表重新分区为基于 id
列值的键分区,并且有两个分区,请使用以下语句:
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
这与删除表并重新创建它,使用 CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
相同地改变了表的结构。
ALTER TABLE ... ENGINE [=] ...
只更改了表的存储引擎,并保留了表的分区方案不变。该语句只有在目标存储引擎提供分区支持时才成功。你可以使用 ALTER TABLE ... REMOVE PARTITIONING
来移除一个表的分区;请参阅第 15.1.9 节,“ALTER TABLE 语句”。
在一个给定的ALTER TABLE
语句中,只能使用一个PARTITION BY
、ADD PARTITION
、DROP PARTITION
、REORGANIZE PARTITION
或COALESCE PARTITION
子句。如果你(例如)想要删除一个分区并重新组织表的剩余分区,你必须这样做:在两个单独的ALTER TABLE
语句中执行(一个使用DROP PARTITION
,然后另一个使用REORGANIZE PARTITION
)。
你可以通过ALTER TABLE ... TRUNCATE PARTITION
来删除一个或多个选定分区中的所有行。