ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...
ANALYZE TABLE分析并且存储一个表和索引的统计信息。在分析的过程中,表被只读锁锁定(InnoDB and MyISAM)。这个语句在InnoDB, NDB, 和MyISAM下的表有效。
需要注意的是,当启用了innodb_stats_persistent选项时,在给表加载大量数据或创建所以之后必须执行ANALYZE TABLE
MySQL会根据标的统计信息决定如何对查询进行改写。进而指导优化器决定使用哪些索引。
要想执行这个命令需要有SELECT 和 INSERT权限。
该命令同样支持对分区表进行统计,你可使用如下语法来分析表的一个或多个分区:
ALTER TABLE ... ANALYZE PARTITION
ANALYZE TABLE返回结果说明:
Column | value |
---|---|
Table | 表名称 |
Op | analyze |
Msg_type | status, error, info, note, or warning |
Msg_text | An informational message |
手工收集统计信息需要调用analyze table,但若表自上次analye至今没有任何改动,即便调用此命令实际也不会收集统计信息,需先让统计信息过期。
可以使用以下语句查看当前存储索引统计信息:
SHOW {INDEX | INDEXES | KEYS}
{FROM | IN} tbl_name
[{FROM | IN} db_name]
[WHERE expr]
默认情况下,ANALYZE TABLE被写入binarylog,所以会同步到slaves上。