Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Management of HASH and KEY Partitions

26.3.2 HASH 和 KEY 分区的管理

通过哈希或键分区的表格在更改分区设置时非常相似,并且它们在许多方面不同于通过范围或列表分区的表格。因此,本节仅讨论通过哈希或键分区的表格的修改。有关添加和删除范围或列表分区表格的分区的讨论,请参阅 第 26.3.1 节,“RANGE 和 LIST 分区的管理”

您不能从通过 HASH 或 KEY 分区的表格中删除分区,就像从通过 RANGE 或 LIST 分区的表格中删除分区一样。然而,您可以使用 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;