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