1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql 查询优化 ~ explain与索引失效

mysql 查询优化 ~ explain与索引失效

时间:2023-08-15 09:15:23

相关推荐

mysql 查询优化 ~ explain与索引失效

一 explain

1 扫描行数根据的是表的统计元数据

2 索引的元数据具体指的就是show index from查到的索引的区分度,索引的区分度越高越好

3 表的元数据是定期收集,所以可能不准确

4 如果感觉explain不准确,可以用analyze table t命令重新收集

5 元数据不准确的场景大多出现在大量删除数据和插入数据场景,针对大表尤其如此

二 元数据收集

参数 innodb_stats_persistent=ON 默认会持久化到内存 默认打开

参数 innodb_stats_auto_recalc 这个参数控制着在表中行的数量改变超过10%的时候,是否重新收集统计信息 这个收集的动作是异步的,在执行完大的dml后,可能会过一段时间才重新收集统计信息 默认打开

参数 innodb_stats_persistent_sample_pages 采样使用的页数 默认20 1 调大可能使analyze命令缓慢,加重负担 2调小可能使大量的执行计划产生误区,并不建议调整此值

三 mysql优化器选择错误索引的方法

1 采用force index强制走某项索引,但是这可能导致一个问题,以后系统迁移或者索引名变更会导致问题

2 改写sql语句,让mysql优化器进行再次判断,选择正确的索引

3 直接删除索引本身,让mysql优化器无法选择该索引

四 总结

1 如果出现mysql执行计划不准确的情况下,可以采用上述方式进行处理,一般情况下,出现索引判断失误的情况比较少

五 明显失效的几个场景

1 当range出现 row扫描为1 ROW时候

2 扫描的行数远远多于表本身的数据量

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。