1.统计信息不准确的影响
统计信息不准确一般会导致MySQL优化器无法选择正确的索引,从而导致优化器选择错误的索引
或者不走索引,引起索引失效
,导致大量慢查询
。
2.什么情况下会导致统计信息不准确?
一般来说,大体分为以下两种情况:
统计信息未及时更新,不正确的统计信息导致索引失效。
表中碎片过多,导致Cardinality不准确,计算错误。
下面就两种场景进行细谈:
统计信息未及时更新
在这个话题之前先看一些参数:
FOR MySQL 5.7:
一般来说统计信息由下面的参数控制:
innodb_stats_persistent:
控制统计信息是否持久化,默认打开。
innodb_stats_auto_recalc:
控制表多少比例的行被修改后自动更新统计信息,默认是10%,默认打开。
innodb_stats_persistent_sample_pages:
开启统计信息持久化之后索引统计时采样的页面数,默认20个页面,太大会导致采样时间过久影响性能。
innodb_stats_method:
统计信息在遇到NULL值如何进行处理,默认NULL值相等即nulls_equal。
另外还有两张表可以看到统计信息的详细:
mysql.innodb_index_stats
和mysql.innodb_table_stats
这两张表会存储一些详细信息,表结构如下: