ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MySQL InnoDB何时更新表的索引统计信息

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

原创 Linux操作系统 作者:张冲andy 时间:2023-09-12 21:53:36 0 删除 编辑

适用于:MySQL 5.1及更高版本

目的:了解InnoDB何时更新表的索引统计信息

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

手动触发

  • ANALYZE TABLE

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

ANALYZE TABLE t1;
  • OPTIMIZE TABLE

InnoDB将OPTIMIZE TABLE实现为表重建和ANALYZE TABLE,因此索引统计信息将也有更新。

  • DDL语句导致表重建 如 alter table xx engine=innodb等
  • 元数据统计

如果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还会在表的“大部分”数据更新时触发重新计算索引统计信息,逻辑取决于是使用持久性还是瞬态统计信息:

  • 持久统计信息:为表启用STATS_AUTO_RECALC时(默认情况下设置为innodb_stats_auto_recalc的值,默认情况下启用), 索引统计信息在更新时更新1/10(10%)行已更改。
  • 瞬态统计:距离上一次更新, 表中至少修改了1/16(6.25%)行时,统计信息会进行更新。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31383567/viewspace-2982799/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
支持就关注我个人公众号:DBA烂笔头 。专注数据库领域,熟悉oracle、mysql、redis、mongodb,clickhouse等相关技术

注册时间:2016-08-11

  • 博文量
    626
  • 访问量
    286314