• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • HASH和KEY分区的管理

    通过散列或键进行分区的表在更改分区设置方面非常相似,并且两者均与通过范围或列表进行分区的表在许多方面有所不同。出于这个原因,本节介绍了仅按哈希或按键分区的表的修改。有关添加或删除按范围或列表分区的表的分区的讨论,请参见“RANGE和LIST分区的管理”。

    你不能从被分区的表分区下降HASHKEY以同样的方式,你可以从表由分区RANGELIST。但是,您可以使用合并HASHKEY分区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 clients COALESCE PARTITION 4;
    Query OK, 0 rows affected (0.02 sec)
    

    COALESCE效果一样好由分区表HASHKEYLINEAR 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;