このような目的の SQL ステートメントを使用して、パーティションテーブルに対して多数のテーブルおよびパーティションメンテナンスタスクを実行できます。
パーティション化されたテーブルのテーブル保守は、パーティション化されたテーブルでサポートされる CHECK TABLE
、OPTIMIZE TABLE
、ANALYZE TABLE
、および REPAIR TABLE
ステートメントを使用して実現できます。
次のリストで説明しているように、ALTER TABLE
へのいくつかの拡張を使用して、1 つ以上のパーティションに対してこのタイプの操作を直接実行できます。
-
パーティションの再構築. パーティションを再構築します。これは、パーティションに格納されているすべてのレコードを削除してからそれらを再度挿入することと同じ効果があります。 これはデフラグに役立つことがあります。
例:
ALTER TABLE t1 REBUILD PARTITION p0, p1;
-
パーティションの最適化. パーティションから多数の行を削除した場合、または可変長行を持つ (つまり、
VARCHAR
、BLOB
、またはTEXT
カラムを持つ) パーティション化されたテーブルに多くの変更を行なった場合は、ALTER TABLE ... OPTIMIZE PARTITION
を使用して、未使用領域を解放したりパーティションデータファイルをデフラグしたりできます。例:
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;
指定されたパーティションに
OPTIMIZE PARTITION
を使用することは、そのパーティションにCHECK PARTITION
、ANALYZE 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
はテーブル内のすべてのパーティションを切り捨てます。