26.3.4 维护分区的部分
可以使用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
在分区中出现重复键错误时失败。你可以使用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
一样删除了表中的所有行。
ALTER TABLE ... TRUNCATE PARTITION ALL
则截断了表中的所有分区。