MySQL 5.7 Reference Manual Including MySQL NDB Cluster 7.5 and NDB Cluster 7.6
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.
Table maintenance of partitioned tables can be accomplished
using the statements CHECK TABLE
,
OPTIMIZE TABLE
,
ANALYZE TABLE
, and
REPAIR TABLE
, which are supported
for partitioned tables.
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.
Example:
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 VARCHAR
,
BLOB
, or
TEXT
columns), you can use
ALTER
TABLE ... OPTIMIZE PARTITION
to reclaim any
unused space and to defragment the partition data file.
Example:
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;
Using OPTIMIZE PARTITION
on a given
partition is equivalent to running CHECK
PARTITION
, ANALYZE PARTITION
,
and REPAIR PARTITION
on that partition.
Some MySQL storage engines, including
InnoDB
, do not support
per-partition optimization; in these cases,
ALTER
TABLE ... OPTIMIZE PARTITION
analyzes and rebuilds
the entire table, and causes an appropriate warning to be
issued. (Bug #11751825, Bug #42822) Use ALTER TABLE
... REBUILD PARTITION
and ALTER TABLE ...
ANALYZE PARTITION
instead, to avoid this issue.
Analyzing partitions. This reads and stores the key distributions for partitions.
Example:
ALTER TABLE t1 ANALYZE PARTITION p3;
Repairing partitions. This repairs corrupted partitions.
Example:
ALTER TABLE t1 REPAIR PARTITION p0,p1;
Normally, REPAIR PARTITION
fails when the
partition contains duplicate key errors. In MySQL 5.7.2 and
later, you can use
ALTER
IGNORE TABLE
with 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 TABLE
with
nonpartitioned tables.
Example:
ALTER TABLE trb3 CHECK PARTITION p1;
This command tells you if the data or indexes in partition
p1
of table t1
are
corrupted. If this is the case, use
ALTER
TABLE ... REPAIR PARTITION
to repair the
partition.
Normally, CHECK PARTITION
fails when the
partition contains duplicate key errors. In MySQL 5.7.2 and
later, you can use
ALTER
IGNORE TABLE
with 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.
The use of mysqlcheck and myisamchk is not supported with partitioned tables.
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, ANALYZE
,
CHECK
, OPTIMIZE
,
REBUILD
, REPAIR
, and
TRUNCATE
operations were not permitted on
subpartitions (Bug #14028340, Bug #65184).