22.3.2 HASH 和 KEY 分区的 Management
通过散列或键进行分区的 table 在更改分区设置方面非常相似,并且两者均与通过范围或列 table 进行分区的 table 在许多方面有所不同。出于这个原因,本节介绍了对仅按哈希或按键分区的 table 的修改。有关添加或删除按范围或列 table 分区的 table 的分区的讨论,请参见第 22.3.1 节“ManagementRANGE 和 LIST 分区”。
您不能以与从RANGE
或LIST
分区的 table 相同的方式删除由HASH
或KEY
分区的 table 的分区。但是,您可以使用ALTER TABLE ... COALESCE PARTITION
语句合并HASH
或KEY
分区。假设您有一个包含有关 Client 端数据的 table,该 table 分为十二个分区。 clients
table 的定义如下所示:
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
与按HASH
,KEY
,LINEAR HASH
或LINEAR KEY
分区的 table 同样适用。这是与上一个示例相似的示例,不同之处仅在于 table 被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
后面的数字是要合并为其余部分的分区的数量,换句话说,这是要从 table 中删除的分区的数量。
如果您尝试删除的分区多于 table 的分区,则结果将显示如下错误:
mysql> ALTER TABLE clients COALESCE PARTITION 18;
ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
要将clients
table 的分区数从 12 增加到 18.请使用ALTER TABLE ... ADD PARTITION
,如下所示:
ALTER TABLE clients ADD PARTITION PARTITIONS 6;