MySQL InnoDB 何时更新表的索引统计信息

由于个人能力有限,文中可能存在错误,欢迎批评指正。

1.说明

适用于:MySQL 5.1及更高版本
目的:了解 InnoDB 何时更新表的索引统计信息

InnoDB 索引统计信息的更新可以由多个不同的事件触发,一些触发器也是存在版本依赖, 以下部分将讨论每个触发器:

2.手动更新

2.1. ANALYZE TABLE

ANALYZE TABLE 命令用于更新索引统计信息,例如:

ANALYZE TABLE t1;

2.2. OPTIMIZE TABLE

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)

3.元数据统计

如果 innodb_stats_on_metadata = ON( MySQL 5.5 及更早版本中的默认值,但 MySQL 5.6 中没有),InnoDB 在以下情况下更新统计数据:

  • 在查询元数据信息语句中

    mysql> SHOW TABLE STATUS;
    mysql> SHOW INDEX;
    
  • 访问某些 INFORMATION_SCHEMA 表时,例如

    INFORMATION_SCHEMA.TABLES
    INFORMATION_SCHEMA.STATISTICS
    
  • 第一次访问某张表;这包含第一次 FLUSH TABLES 之后,FLUSH TABLES WITH READ LOCK

  • DDL 语句导致表重建

使用 innodb_stats_on_metadata = OFF 更新 InnoDB 索引统计信息的主要方法是使用 ANALYZE TABLE 。 由于 InnoDB 将 OPTIMIZE TABLE 实现为表重建,然后是 ANALYZE TABLE ,OPTIMIZE TABLE 还将重新计算统计信息。

4.自动更新

此外,InnoDB 还会在表的 “大部分” 数据更新时触发重新计算索引统计信息,逻辑取决于是使用持久性还是瞬态统计信息:

  • 持久统计信息:为表启用 STATS_AUTO_RECALC 时(默认情况下设置为 innodb_stats_auto_recalc 的值,默认情况下启用),索引统计信息在更新时更新 1/10(10%) 行已更改。
  • 瞬态统计:距离上一次更新,表中至少修改(这里所说的修改是指 update 及 insert ,不包含 delete )1/16(6.25%) 行时,统计信息会进行更新。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值