InnoDB 表索引统计什么时候更新?

Eri*_*ath 4 mysql innodb

在 MySQL 5.5.20 的 vanilla 版本中,InnoDB 表索引统计信息何时更新?哪些事件会触发此类更新?我看到评论表明以下内容可能会触发它:

  • 第一次打开桌子
  • 查询针对表运行
  • 分析表
  • 表的大小更改了某个阈值

Rol*_*DBA 5

你应该寻找这个变量

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 权限