本文共 1617 字,大约阅读时间需要 5 分钟。
适用于:MySQL 5.1及更高版本
目的:了解InnoDB何时更新表的索引统计信息InnoDB索引统计信息的更新可以由多个不同的事件触发,一些触发器也是存在版本依赖, 以下部分将讨论每个触发器:
ANALYZE TABLE命令用于更新索引统计信息,例如:
ANALYZE TABLE t1;
InnoDB将OPTIMIZE TABLE实现为表重建和ANALYZE TABLE,因此索引统计信息将也有更新。
stark> OPTIMIZE TABLE t1;+---------+----------+-----------+-----------------------------------------------------------------+|Table |Op |Msg_type |Msg_text |+---------+----------+-----------+-----------------------------------------------------------------+|stark.t1 |optimize |note |Table does not support optimize,doing recreate + analyze instead |+---------+----------+-----------+-----------------------------------------------------------------+|stark.t1 |optimize |status |OK |+---------+----------+-----------+-----------------------------------------------------------------+2 rows in set (0.10 sec)
如果innodb_stats_on_metadata = ON(MySQL 5.5及更早版本中的默认值,但MySQL 5.6中没有),InnoDB在以下情况下更新统计数据:
使用innodb_stats_on_metadata = OFF更新InnoDB索引统计信息的主要方法是使用ANALYZE TABLE。 由于InnoDB将OPTIMIZE TABLE实现为表重建,然后是ANALYZE TABLE,OPTIMIZE TABLE还将重新计算统计信息。
此外,InnoDB还会在表的“大部分”数据更新时触发重新计算索引统计信息,逻辑取决于是使用持久性还是瞬态统计信息:
转载地址:http://rasqi.baihongyu.com/