13.7.2.1 ANALYZE TABLE 语法

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name [, tbl_name] ...

分析 TABLE执行 key 分布分析并存储指定的 table 或表的分布。对于MyISAM表,此语句等同于使用myisamchk --analyze

此语句需要 table 的选择插入权限。

分析 TABLE适用于InnoDBNDBMyISAM表。它不适用于视图。

分区表支持分析 TABLE,您可以使用ALTER TABLE ... ANALYZE PARTITION分析一个或多个分区;有关更多信息,请参阅第 13.1.8 节,“ALTER TABLE 语法”第 22.3.4 节,“分区的维护”

在分析期间,table 被锁定为InnoDBMyISAM的读锁定。

默认情况下,服务器将分析 TABLE statements 写入二进制 log,以便它们复制到复制从属服务器。要禁止 logging,请指定可选的NO_WRITE_TO_BINLOG关键字或其别名LOCAL

ANALYZE TABLE 输出

分析 TABLE返回结果集,其中包含以下 table 中显示的列。

Tabletable name
Op总是analyze
Msg_typestatuserrorinfonotewarning
Msg_text信息性消息
Key 分布分析

如果自上次 key 分布分析后 table 未发生更改,则不会再次分析 table。

MySQL 使用存储的 key 分布来决定 table join order,用于连接除常量之外的其他东西。此外,在决定在查询中使用哪些索引用于特定 table 时,可以使用 key 分发。

有关 key 分布分析如何在InnoDB中工作的更多信息,请参阅部分 14.8.11.1,“配置持久优化器统计信息参数”第 14.8.11.3 节,“估算 InnoDB 表的 ANALYZE TABLE 复杂性”。另见第 14.6.1.6 节,“InnoDB 表的限制”。特别是,如果启用了innodb_stats_persistent系统变量,则必须在将大量数据加载到InnoDB table 之后运行分析 TABLE,或者创建一个新索引。

要检查存储的 key 分配基数,请使用显示索引语句或INFORMATION_SCHEMA 统计 table。见第 13.7.5.22 节,“SHOW INDEX 语法”第 24.24 节,“INFORMATIONSCHEMAç计表”

其他考虑因素

ANALYZE TABLE清除INFORMATIONSCHEMA.INNODBTABLESTATS table 中的 table 统计信息,并将STATS_INITIALIZED列设置为Uninitialized。在访问 table 的下一个 time 时再次收集统计信息。

Updated at: 9 months ago
表维护声明Table of content检查 TABLE 语法