||
适用于:MySQL 5.1及更高版本
目的:了解InnoDB何时更新表的索引统计信息
InnoDB索引统计信息的更新可以由多个不同的事件触发,一些触发器也是存在版本依赖,主要为手动触发与自动更新 以下部分将讨论每个触发器:
手动触发
ANALYZE TABLE命令用于更新索引统计信息,例如:
ANALYZE TABLE t1;
InnoDB将OPTIMIZE TABLE实现为表重建和ANALYZE TABLE,因此索引统计信息将也有更新。
如果innodb_stats_on_metadata = ON(MySQL 5.5及更早版本中的默认值,但MySQL 5.6中没有),InnoDB在以下情况下更新统计数据:
在查询元数据信息语句中:SHOW TABLE STATUS 、 SHOW INDEX
访问某些INFORMATION_SCHEMA表时,例如:TABLES 、STATISTICS
第一次访问某张表;这包含第一次FLUSH TABLES之后,FLUSH TABLES WITH READ LOCK
使用innodb_stats_on_metadata = OFF更新InnoDB索引统计信息的主要方法是使用ANALYZE TABLE。 由于InnoDB将OPTIMIZE TABLE实现为表重建,然后是ANALYZE TABLE,OPTIMIZE TABLE还将重新计算统计信息。
自动更新
此外,InnoDB还会在表的“大部分”数据更新时触发重新计算索引统计信息,逻辑取决于是使用持久性还是瞬态统计信息:
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com