MySQL 8.4 发行说明
按哈希或键分区的表在分区设置的更改方面非常相似,并且两者在许多方面与按范围或列表分区的表不同。因此,本节仅讨论按哈希或键分区的表的修改。有关按范围或列表分区的表添加和删除分区的讨论,请参阅 第 26.3.1 节,“RANGE 和 LIST 分区的管理”。
您不能像从按 RANGE
或 LIST
分区的表中删除分区那样从按 HASH
或 KEY
分区的表中删除分区。但是,您可以使用 ALTER TABLE ... COALESCE PARTITION
合并 HASH
或 KEY
分区。假设一个包含客户数据的 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
同样适用于按 HASH
、KEY
、LINEAR 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;