MySQL 9.0 参考手册  /  ...  /  HASH 和 KEY 分区的管理

26.3.2 HASH 和 KEY 分区的管理

按哈希或键进行分区的表在更改分区设置方面非常相似,并且两者都与按范围或列表进行分区的表在许多方面有所不同。因此,本节仅讨论按哈希或键分区的表的修改。有关对按范围或列表进行分区的表的添加和删除分区的讨论,请参见 第 26.3.1 节“RANGE 和 LIST 分区的管理”

您不能像从按 RANGELIST 分区的表中那样,从按 HASHKEY 分区的表中删除分区。但是,您可以使用 ALTER TABLE ... COALESCE PARTITION 合并 HASHKEY 分区。假设包含有关客户端数据的 clients 表分为 12 个分区,如下所示创建

Press CTRL+C to copy
CREATE TABLE clients ( id INT, fname VARCHAR(30), lname VARCHAR(30), signed DATE ) PARTITION BY HASH( MONTH(signed) ) PARTITIONS 12;

要将分区数量从 12 个减少到 8 个,请执行以下 ALTER TABLE 语句

Press CTRL+C to copy
mysql> ALTER TABLE clients COALESCE PARTITION 4; Query OK, 0 rows affected (0.02 sec)

COALESCE 同样适用于按 HASHKEYLINEAR HASHLINEAR KEY 分区的表。这是一个与前一个示例类似的示例,唯一的区别是该表是按 LINEAR KEY 分区的

Press CTRL+C to copy
mysql> CREATE TABLE clients_lk ( -> id INT, -> fname VARCHAR(30), -> lname VARCHAR(30), -> signed DATE -> ) -> PARTITION BY LINEAR KEY(signed) -> PARTITIONS 12; Query OK, 0 rows affected (0.03 sec) mysql> ALTER TABLE clients_lk COALESCE PARTITION 4; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0

COALESCE PARTITION 后面的数字是要合并到剩余部分中的分区数量,换句话说,它是从表中删除的分区数量。

尝试删除的 파티션 超过表中的 파티션 数量会导致如下错误

Press CTRL+C to copy
mysql> ALTER TABLE clients COALESCE PARTITION 18; ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead

要将 clients 表的分区数量从 12 个增加到 18 个,请使用 ALTER TABLE ... ADD PARTITION,如下所示

Press CTRL+C to copy
ALTER TABLE clients ADD PARTITION PARTITIONS 6;