MySQL 5.7 管理哈希和键分区

管理哈希和键分区
按哈希或按键分区的表在更改分区设置方面非常相似,两者与按范围或列表分区的表在许多方面有所不同。因此,本节讨论的是对按哈希或按键 分区表的修改。

您不能像从按范围或列表分区的表中删除分区那样,从哈希或按键分区的表中删除分区。但是,你可以使用ALTER TABLE … COALESCE PARTITION语句来合并哈希分区或键分区。假设你有一个包含客户端数据的表,分为12个分区。clients表定义如下:

mysql> CREATE TABLE clients (
    -> id INT,
    -> fname VARCHAR(30),
    -> lname VARCHAR(30),
    -> signed DATE
    -> )
    -> PARTITION BY HASH( MONTH(signed) )
    -> PARTITIONS 12;
Query OK, 0 rows affected (0.07 sec)

要将分区数量从12个减少到8个,请执行以下ALTER TABLE命令:

mysql> ALTER TABLE clients COALESCE PARTITION 4;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

COALESCE同样适用于按HASH、KEY、LINEAR HASH或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.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

COALESCE PARTITION后面的数字是要合并到剩余分区中的分区数量——换句话说,它是要从表中删除的分区数量。

如果您试图删除比表所拥有的更多的分区,则结果是如下所示的错误:

mysql> ALTER TABLE clients COALESCE PARTITION 18;
ERROR 1508 (HY000): Cannot remove all partitions, use DROP TABLE instead

将客户端表的分区数量从12增加到18。使用ALTER TABLE … ADD PARTITION来添加分区如下所示:

mysql> ALTER TABLE clients ADD PARTITION PARTITIONS 6;
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

发表评论

电子邮件地址不会被公开。