可以使用用于此类目的的 SQL 语句对分区表执行许多表和分区维护任务。
可以使用语句 CHECK TABLE、OPTIMIZE TABLE、ANALYZE TABLE 和 REPAIR TABLE 来完成对分区表的表维护,这些语句都支持分区表。
您可以使用 ALTER TABLE 的一些扩展功能来直接对一个或多个分区执行此类操作,如下面的列表中所述
- 重建分区。重建分区;这与删除存储在分区中的所有记录,然后重新插入它们的效果相同。这对于碎片整理很有用。 - 示例 - 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。- 一些 MySQL 存储引擎,包括 - InnoDB,不支持按分区优化;在这些情况下,- ALTER TABLE ... OPTIMIZE PARTITION会分析和重建整个表,并发出相应的警告。(错误 #11751825,错误 #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与此选项一起使用,在这种情况下,将从分区中删除所有由于存在重复键而无法移动的行。(错误 #16900947)
- 检查分区。您可以检查分区是否存在错误,就像可以使用 - CHECK TABLE检查非分区表一样。- 示例 - ALTER TABLE trb3 CHECK PARTITION p1;- 此语句告诉您表 - t1的分区- p1中的数据或索引是否已损坏。如果是这种情况,请使用- ALTER TABLE ... REPAIR PARTITION来修复分区。- 通常情况下,当分区包含重复键错误时, - CHECK PARTITION会失败。您可以将- ALTER IGNORE TABLE与此选项一起使用,在这种情况下,该语句将返回分区中发现重复键冲突的每一行的内容。仅报告表的分区表达式中列的值。(错误 #16900947)
上面列表中的每个语句也支持关键字 ALL 来代替分区名称列表。使用 ALL 会导致该语句作用于表中的所有分区。
您还可以使用 ALTER TABLE ... TRUNCATE PARTITION 截断分区。此语句可用于从一个或多个分区中删除所有行,其方式与 TRUNCATE TABLE 从表中删除所有行的方式非常相似。
        ALTER TABLE ... TRUNCATE PARTITION ALL 截断表中的所有分区。