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


24.3.4 パーティションの保守

このような目的の SQL ステートメントを使用して、パーティションテーブルに対して多数のテーブルおよびパーティションメンテナンスタスクを実行できます。

パーティション化されたテーブルのテーブル保守は、パーティション化されたテーブルでサポートされる CHECK TABLEOPTIMIZE TABLEANALYZE TABLE、および REPAIR TABLE ステートメントを使用して実現できます。

次のリストで説明しているように、ALTER TABLE へのいくつかの拡張を使用して、1 つ以上のパーティションに対してこのタイプの操作を直接実行できます。

  • パーティションの再構築.  パーティションを再構築します。これは、パーティションに格納されているすべてのレコードを削除してからそれらを再度挿入することと同じ効果があります。 これはデフラグに役立つことがあります。

    例:

    ALTER TABLE t1 REBUILD PARTITION p0, p1;
  • パーティションの最適化.  パーティションから多数の行を削除した場合、または可変長行を持つ (つまり、VARCHARBLOB、または TEXT カラムを持つ) パーティション化されたテーブルに多くの変更を行なった場合は、ALTER TABLE ... OPTIMIZE PARTITION を使用して、未使用領域を解放したりパーティションデータファイルをデフラグしたりできます。

    例:

    ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

    指定されたパーティションに OPTIMIZE PARTITION を使用することは、そのパーティションに CHECK PARTITIONANALYZE PARTITION、および REPAIR PARTITION を実行することと同等です。

    InnoDB を含む一部の MySQL ストレージエンジンは、パーティションごとの最適化をサポートしていません。この場合、ALTER TABLE ... OPTIMIZE PARTITION はテーブル全体を分析して再構築し、適切な警告が発行されます。 (Bug #11751825、Bug #42822)。この問題を回避するには、代わりに ALTER TABLE ... REBUILD PARTITION および ALTER TABLE ... ANALYZE PARTITION を使用してください。

  • パーティションの分析.  これは、パーティションのキー分布を読み取って格納します。

    例:

    ALTER TABLE t1 ANALYZE PARTITION p3;
  • パーティションの修復.  これは、破損したパーティションを修復します。

    例:

    ALTER TABLE t1 REPAIR PARTITION p0,p1;

    通常、パーティションに重複キーエラーが含まれている場合、REPAIR PARTITION は失敗します。 このオプションを指定して ALTER IGNORE TABLE を使用できます。この場合、重複キーが存在するために移動できないすべての行がパーティションから削除されます (Bug #16900947)。

  • パーティションのチェック.  パーティション化されていないテーブルで CHECK TABLE を使用できるのとほぼ同様に、パーティションのエラーをチェックできます。

    例:

    ALTER TABLE trb3 CHECK PARTITION p1;

    このステートメントは、テーブル t1 のパーティション p1 のデータまたはインデックスが破損しているかどうかを示します。 その場合は、ALTER TABLE ... REPAIR PARTITION を使用してパーティションを修復してください。

    通常、パーティションに重複キーエラーが含まれている場合、CHECK PARTITION は失敗します。 このオプションを指定して ALTER IGNORE TABLE を使用すると、重複キー違反が見つかったパーティション内の各行の内容がステートメントによって返されます。 テーブルのパーティション化式のカラムの値のみがレポートされます。 (Bug #16900947)

上記のリストの各ステートメントでは、パーティション名のリストの代わりにキーワード ALL もサポートされます。 ALL を使用すると、テーブル内のすべてのパーティションにステートメントが作用します。

ALTER TABLE ... TRUNCATE PARTITION を使用してパーティションを切り捨てることもできます。 このステートメントは、TRUNCATE TABLE がテーブルからすべての行を削除するのとほぼ同様に、1 つ以上のパーティションからすべての行を削除するために使用できます。

ALTER TABLE ... TRUNCATE PARTITION ALL はテーブル内のすべてのパーティションを切り捨てます。


関連キーワード:  TABLE, PARTITION, テーブル, パーティショニング, 保守, ステートメント, リファレンス, キー, マニュアル, 管理