MySQL 8.0 参考手册  / 第24章分区  / 24.3 分区管理  /  22.3.2 HASH和KEY分区的管理

22.3.2 HASH和KEY分区的管理

按散列或键分区的表在分区设置更改方面彼此非常相似,并且两者在许多方面与按范围或列表分区的表不同。出于这个原因,本节将讨论修改按散列或仅按键分区的表。有关添加和删除按范围或列表分区的表的分区的讨论,请参阅 第 22.3.1 节,“RANGE 和 LIST 分区的管理”

您不能从按 或 分区的表中删除分区的方式与从按 或HASH分区的表中删除分区KEY的方式相同 。但是,您可以使用该语句进行合并或 分区。假设您有一个包含有关客户的数据的表,该表分为十二个分区。该表的定义如下所示: RANGELISTHASHKEYALTER TABLE ... COALESCE PARTITIONclients

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

要将分区数从十二个减少到八个,请执行以下 ALTER TABLE命令:

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

COALESCE适用于按HASHKEYLINEAR HASH或 分区的表LINEAR KEY。这是一个与上一个类似的示例,不同之处仅在于该表按以下方式分区 LINEAR KEY

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;