ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
TABLE tbl_name [, tbl_name] ...
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
TABLE tbl_name
UPDATE HISTOGRAM ON col_name [, col_name] ...
[WITH N BUCKETS]
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
TABLE tbl_name
DROP HISTOGRAM ON col_name [, col_name] ...
ANALYZE TABLE 生成表统计信息:
1、ANALYZE TABLE没有任一个HISTOGRAM子句的情况下,将 执行键分布分析并存储一个或多个命名表的分布。对于MyISAM表, ANALYZE TABLE进行键分布分析等效于使用 myisamchk --analyze。
2、ANALYZE TABLE带有该 UPDATE HISTOGRAM子句的列将为命名表列生成直方图统计信息,并将其存储在数据字典中。此语法仅允许使用一个表名。
3、ANALYZE TABLE带有该 DROP HISTOGRAM子句的对象将从数据字典中删除命名表列的直方图统计信息。此语法仅允许使用一个表名。
该声明要求SELECT 和INSERT对表的权限。
ANALYZE TABLE有工作 InnoDB,NDB和 MyISAM表。它不适用于视图。
如果innodb_read_only启用了系统变量,则ANALYZE TABLE可能会失败,因为它无法更新使用的数据字典中的统计表 InnoDB。对于ANALYZE TABLE更新密钥分发的操作,即使该操作更新表本身(例如,如果它是MyISAM表),也可能会发生故障。要获取更新的分发统计信息,请设置 information_schema_stats_expiry=0。
ANALYZE TABLE支持分区表,您可以ALTER TABLE ... ANALYZE PARTITION用来分析一个或多个分区;有关更多信息,请参见第13.1.9节“ ALTER TABLE语句”和 第23.3.4节“分区的维护”。
在分析过程中,该表已被锁定与读锁 InnoDB和MyISAM。
ANALYZE TABLE从表定义高速缓存中删除该表,这需要刷新锁。如果仍有长时间运行的语句或事务仍在使用该表,则后续的语句和事务必须等待这些操作完成才能释放刷新锁。因为ANALYZE TABLE它本身通常很快完成,所以涉及同一个表的延迟事务或语句由于剩余的刷新锁可能并不明显。
默认情况下,服务器将ANALYZE TABLE语句写入二进制日志,以便它们复制到复制从属服务器。要禁止记录日志,请指定可选NO_WRITE_TO_BIN