分区维护
在MySQL 5.7中,许多表和分区维护任务可以使用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会分析并重建整个表,并发出 适当的警告。(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会失败。在MySQL 5.7.2及更高版本中,你可以使用ALTER IGNORE TABLE这个选项,在这 种情况下,所有因为重复键而无法移动的行都会从分区中移除(Bug #16900947)。
.检查分区。您可以检查分区是否有错误,其方式与对未分区的表使用CHECK TABLE的方式大致相同。
例如:
ALTER TABLE trb3 CHECK PARTITION p1;
这个命令将告诉您表t1的分区p1中的数据或索引是否损坏。如果是这种情况,请使用ALTER TABLE…REPAIR PARTITION修复分区。
正常情况下,当分区包含重复的键错误时,CHECK PARTITION会失败。在MySQL 5.7.2及更高版本中,你可以使用ALTER IGNORE TABLE这个选项, 在这种情况下,该语句将返回发现违反重复键的分区中每一行的内容。只报告表的分区表达式中列的值。(错误# 16900947)
刚才显示的列表中的每个语句还支持关键字ALL来代替分区名称列表。使用ALL会导致语句作用于表中的所有分区。
mysqlcheck和myisamchk对分区表不支持。
在MySQL 5.7中,你也可以使用ALTER TABLE … TRUNCATE PARTITION。这条语句可以用来删除一个或多个分区中的所有行,其方式与TRUNCATE TABLE删除表中的所有行差不多。
ALTER TABLE…TRUNCATE PARTITION ALL截断表中的所有分区。