MySQL 8.4 Reference Manual  /  ...  /  Management of HASH and KEY Partitions

26.3.2 HASH 和 KEY 分区的管理

使用哈希或键值进行分区的表格在分区设置的更改方面非常相似,且与通过范围或列表进行分区的表格有很多不同之处。因此,本节仅讨论哈希或键值分区的表格修改。有关添加和删除通过范围或列表进行分区的表格的分区的讨论,请参阅第26.3.1节,“管理RANGE和LIST分区”

您不能像通过范围或列表进行分区的表格那样从使用哈希或键值进行分区的表格中删除分区。然而,您可以使用`ALTER TABLE ... COALESCE PARTITION`合并哈希或键值分区。假设一个名为`clients`的表,包含有关客户的数据,被划分成12个分区,创建方式如下:

CREATE TABLE clients (
    id INT,
    fname VARCHAR(30),
    lname VARCHAR(30),
    signed DATE
)
PARTITION BY HASH( MONTH(signed) )
PARTITIONS 12;

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

mysql> ALTER TABLE clients COALESCE PARTITION 4;
Query OK, 0 rows affected (0.02 sec)

COALESCE与通过哈希、键值、线性哈希或线性键进行分区的表格效果相同。以下是一个与前一个类似但表格以线性键进行分区的例子:

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`后的数字是要合并到剩余部分中的分区数量——换句话说,是要从表中移除的分区数量。

尝试移除比表格中更多的分区会导致类似于以下错误:

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`,如下所示:

ALTER TABLE clients ADD PARTITION PARTITIONS 6;