22.3.4 分区维护

对于 MySQL 5.7 中的分区 table,可以使用旨在用于此目的的 SQL 语句执行许多 table 和分区维护任务。

可以使用语句CHECK TABLEOPTIMIZE TABLEANALYZE TABLEREPAIR TABLE来完成分区 table 的 table 维护,这对于分区 table 是受支持的。

您可以使用多个ALTER TABLEextensions 来直接在一个或多个分区上执行此类型的操作,如下 table 所示:

Example:

ALTER TABLE t1 REBUILD PARTITION p0, p1;

Example:

ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

在给定分区上使用OPTIMIZE PARTITION等效于在该分区上运行CHECK PARTITIONANALYZE PARTITIONREPAIR PARTITION

某些 MySQL 存储引擎(包括InnoDB)不支持按分区优化;在这种情况下,更改 table...优化分区分析并重建整个 table,并发出适当的警告。 (错误#11751825,错误#42822)改用ALTER TABLE ... REBUILD PARTITIONALTER TABLE ... ANALYZE PARTITION来避免此问题。

Example:

ALTER TABLE t1 ANALYZE PARTITION p3;

Example:

ALTER TABLE t1 REPAIR PARTITION p0,p1;

通常,当分区包含重复的键错误时,REPAIR PARTITION会失败。在 MySQL 5.7.2 和更高版本中,可以将此选项与更改 table配合使用,在这种情况下,由于存在重复键而无法移动的所有行都将从分区中删除(错误#16900947)。

Example:

ALTER TABLE trb3 CHECK PARTITION p1;

该命令将告诉您 tablet1的分区p1中的数据或索引是否已损坏。在这种情况下,请使用更改 table...修复分区修复分区。

通常,当分区包含重复的键错误时,CHECK PARTITION会失败。在 MySQL 5.7.2 和更高版本中,可以将此选项与更改 table配合使用,在这种情况下,该语句返回分区中每一行的内容,在该行中发现重复的键冲突。仅报告 table 分区 table 达式中各列的值。错误 16900947)

刚刚显示的列 table 中的每个语句还支持关键字ALL代替分区名称列 table。使用ALL会使该语句作用于 table 中的所有分区。

分区 table 不支持使用mysqlcheckmyisamchk

在 MySQL 5.7 中,您也可以使用ALTER TABLE ...截断分区截断分区。此语句可用于删除一个或多个分区中的所有行,其方式与TRUNCATE TABLE从 table 中删除所有行的方式几乎相同。

ALTER TABLE ...截断所有分区截断 table 中的所有分区。

在 MySQL 5.7.2 之前,子分区上不允许ANALYZECHECKOPTIMIZEREBUILDREPAIRTRUNCATE操作(错误#14028340,错误#65184)。

首页