HASH和KEY分区的管理
通过散列或键进行分区的表在更改分区设置方面非常相似,并且两者均与通过范围或列表进行分区的表在许多方面有所不同。出于这个原因,本节介绍了仅按哈希或按键分区的表的修改。有关添加或删除按范围或列表分区的表的分区的讨论,请参见“RANGE和LIST分区的管理”。
你不能从被分区的表分区下降HASH
或KEY
以同样的方式,你可以从表由分区RANGE
或LIST
。但是,您可以使用合并HASH
或KEY
分区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 clientsCOALESCE 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_lkCOALESCE PARTITION 4; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0
接下来COALESCE PARTITION
的数字是要合并为其余部分的分区的数量,换句话说,这是要从表中删除的分区的数量。
尝试删除比表中更多的分区会导致如下错误:
mysql>ALTER TABLE clientsCOALESCE PARTITION 18; ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
要将clients
表的分区数从12增加到18,请ALTER TABLE ... ADD PARTITION
按如下所示使用:
ALTER TABLE clientsADD PARTITION PARTITIONS 6;