MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  HASH および KEY パーティションの管理

24.3.2 HASH および KEY パーティションの管理

ハッシュまたはキーによってパーティション化されたテーブルは、パーティショニングセットアップで変更に関して互いによく似ていますが、範囲またはリストによってパーティション化されたテーブルとはいくつかの点で異なります。 このため、このセクションではハッシュまたはキーによってパーティション化されたテーブルの変更についてのみ取り上げます。 範囲またはリストによってパーティション化されたテーブルのパーティションを追加および削除することについては、セクション24.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 は、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;

関連キーワード:  テーブル, パーティショニング, HASH, KEY, TABLE, PARTITION, 管理, clients, COALESCE, RANGE