在 MySQL 5.6 的分区表上,可以使用专用于此类目的的 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
重建整个表。在 MySQL 5.6.9 及更高版本中,在这样的表上运行此语句会导致整个表重建和分析,并发出适当的警告。(Bug #11751825,Bug #42822)使用ALTER TABLE ... REBUILD PARTITION
andALTER TABLE ... ANALYZE PARTITION
来避免这个问题。分析分区。 这会读取并存储分区的密钥分布。
例子:
ALTER TABLE t1 ANALYZE PARTITION p3;
修复分区。 这将修复损坏的分区。
例子:
ALTER TABLE t1 REPAIR PARTITION p0,p1;
检查分区。 您可以使用
CHECK TABLE
与非分区表相同的方式来检查分区是否有错误。例子:
ALTER TABLE trb3 CHECK PARTITION p1;
此命令告诉您
p1
表分区中的数据或索引t1
是否已损坏。如果是这种情况,请使用ALTER TABLE ... REPAIR PARTITION
修复分区。
刚刚显示的列表中的每个语句还支持关键字ALL
代替分区名称列表。UsingALL
导致该语句作用于表中的所有分区。
分区表不支持 使用mysqlcheck和 myisamchk 。
在 MySQL 5.6 中,您还可以使用
ALTER
TABLE ... TRUNCATE PARTITION
. 该语句可用于从一个或多个分区中删除所有行,其方式与TRUNCATE TABLE
从表中删除所有行的方式大致相同。
ALTER TABLE ... TRUNCATE PARTITION ALL
截断表中的所有分区。
ANALYZE
、CHECK
、
OPTIMIZE
、REBUILD
、
REPAIR
和TRUNCATE
操作不支持子分区。