Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Maintenance of Partitions

26.3.4 分区维护

可以使用 SQL 语句来执行分区表的各种维护任务。

可以使用 CHECK TABLEOPTIMIZE TABLEANALYZE TABLEREPAIR TABLE 语句来维护分区表。

可以使用 ALTER TABLE 语句的扩展来直接对一个或多个分区执行操作,如下所示:

  • 重建分区。 重建分区;这与从分区中删除所有记录,然后重新插入它们的效果相同。这对于碎片整理很有用。

    示例:

    ALTER TABLE t1 REBUILD PARTITION p0, p1;
  • 优化分区。 如果您从分区中删除了大量行或对具有可变长度行(即具有 VARCHARBLOBTEXT 列)的分区表进行了许多更改,可以使用 ALTER TABLE ... OPTIMIZE PARTITION 来回收未使用的空间并碎片分区数据文件。

    示例:

    ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

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

    一些 MySQL 存储引擎,包括 InnoDB,不支持每个分区的优化;在这些情况下,ALTER TABLE ... OPTIMIZE PARTITION 将分析和重建整个表,并发出适当的警告。(Bug #11751825,Bug #42822)使用 ALTER TABLE ... REBUILD PARTITIONALTER 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 将截断表中的所有分区。