MySQL 8.4 參考手冊  /  ...  /  HASH 和 KEY 分割區的管理

26.3.2 HASH 和 KEY 分割區的管理

透過雜湊 (hash) 或金鑰 (key) 分割的表格,在變更分割設定方面彼此非常相似,且在許多方面與透過範圍或列表分割的表格不同。因此,本節僅說明修改透過雜湊或金鑰分割的表格。有關新增和刪除透過範圍或列表分割之表格分割區的討論,請參閱第 26.3.1 節,「範圍和列表分割區的管理」

您無法像從透過 RANGELIST 分割的表格中一樣,從透過 HASHKEY 分割的表格中刪除分割區。但是,您可以使用 ALTER TABLE ... COALESCE PARTITION 合併 HASHKEY 分割區。假設一個包含客戶資料的 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 HASHLINEAR 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;