22.3.4 Maintenance of Partitions
A number of table and partition maintenance tasks can be carried out using SQL statements intended for such purposes on partitioned tables in MySQL 5.7.
You can use a number of extensions to
ALTER TABLE for performing operations of this type on one or more partitions directly, as described in the following list:
Rebuilding partitions. Rebuilds the partition; this has the same effect as dropping all records stored in the partition, then reinserting them. This can be useful for purposes of defragmentation.
ALTER TABLE t1 REBUILD PARTITION p0, p1;
Optimizing partitions. If you have deleted a large number of rows from a partition or if you have made many changes to a partitioned table with variable-length rows (that is, having
TEXTcolumns), you can use
ALTER TABLE ... OPTIMIZE PARTITIONto reclaim any unused space and to defragment the partition data file.
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;
OPTIMIZE PARTITIONon a given partition is equivalent to running
ANALYZE PARTITION, and
REPAIR PARTITIONon that partition.
Some MySQL storage engines, including
InnoDB, do not support per-partition optimization; in these cases,
ALTER TABLE ... OPTIMIZE PARTITIONanalyzes and rebuilds the entire table, and causes an appropriate warning to be issued. (Bug #11751825, Bug #42822) Use
ALTER TABLE ... REBUILD PARTITIONand
ALTER TABLE ... ANALYZE PARTITIONinstead, to avoid this issue.
Analyzing partitions. This reads and stores the key distributions for partitions.
ALTER TABLE t1 ANALYZE PARTITION p3;
Repairing partitions. This repairs corrupted partitions.
ALTER TABLE t1 REPAIR PARTITION p0,p1;
REPAIR PARTITIONfails when the partition contains duplicate key errors. In MySQL 5.7.2 and later, you can use
ALTER IGNORE TABLEwith this option, in which case all rows that cannot be moved due to the presence of duplicate keys are removed from the partition (Bug #16900947).
Checking partitions. You can check partitions for errors in much the same way that you can use
CHECK TABLEwith nonpartitioned tables.
ALTER TABLE trb3 CHECK PARTITION p1;
This command will tell you if the data or indexes in partition
t1are corrupted. If this is the case, use
ALTER TABLE ... REPAIR PARTITIONto repair the partition.
CHECK PARTITIONfails when the partition contains duplicate key errors. In MySQL 5.7.2 and later, you can use
ALTER IGNORE TABLEwith this option, in which case the statement returns the contents of each row in the partition where a duplicate key violation is found. Only the values for the columns in the partitioning expression for the table are reported. (Bug #16900947)
Each of the statements in the list just shown also supports the keyword
ALL in place of the list of partition names. Using
ALL causes the statement to act on all partitions in the table.
In MySQL 5.7, you can also truncate partitions using
ALTER TABLE ... TRUNCATE PARTITION. This statement can be used to delete all rows from one or more partitions in much the same way that
TRUNCATE TABLE deletes all rows from a table.
ALTER TABLE ... TRUNCATE PARTITION ALL truncates all partitions in the table.
Prior to MySQL 5.7.2,
TRUNCATE operations were not permitted on subpartitions (Bug #14028340, Bug #65184).