在 MySQL 5.5.20 的 vanilla 版本中,InnoDB 表索引统计信息何时更新?哪些事件会触发此类更新?我看到评论表明以下内容可能会触发它:
你应该寻找这个变量
mysql> show variables like '%metadata%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_stats_on_metadata | ON |
+--------------------------+-------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
根据 MySQL 文档,当设置innodb_stats_on_metadata时(默认情况下),InnoDB 在元数据语句(如 SHOW TABLE STATUS 或 SHOW INDEX)期间或在访问 INFORMATION_SCHEMA 表 TABLES 或 STATISTICS 时更新统计信息。(这些更新类似于 ANALYZE TABLE 发生的情况。)禁用时,InnoDB 在这些操作期间不会更新统计信息。禁用此变量可以提高具有大量表或索引的模式的访问速度。它还可以提高涉及 InnoDB 表的查询的执行计划的稳定性。
一旦禁用,您将不得不ANALYZE TABLE在您选择的 InnoDB 表上运行。确保您拥有 SELECT 和 INSERT 权限。