【数据库】慢SQL治理

https://blog.51cto.com/u_15437298/4692683  阿里技术号强推:慢SQL治理分享

https://developer.aliyun.com/article/872429   慢sql治理经典案例分享

https://www.1024sou.com/article/624553.html 慢SQL引发MySQL高可用切换排查全过程

https://zhuanlan.zhihu.com/p/220028437  导致MySQL索引失效的几种常见写法 --- 重要参考

https://tech.meituan.com/2014/06/30/mysql-index.html


 高性能索引

1、独立的列:索引列不能是表达式的一部分;
2、选择区分度高的列作为索引;
3、选择合适的索引列顺序:将选择性高的索引列放在最前列;
4、覆盖索引:查询的列均在索引中,不需要回查聚簇索引;
5、使用索引扫描来做排序;
6、在遵守最左前缀的原则下,尽量扩展索引,而不是创建索引

7、最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

8、=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。

索引失效场景

1、OR查询左右有未命中索引的;
2、复合索引不满足最左匹配原则;
3、Like以%开头;
4、需要类型转换;
5、where中索引列有运算;
6、where中索引列使用了函数;
7、如果mysql觉得全表扫描更快时(数据少时)

#####################################################

场景:全表扫描

场景:索引混乱

场景:非必要排序

场景:粗粒度查询

场景:OR导致索引失效

更多:参考 https://zhuanlan.zhihu.com/p/220028437   


 

posted @ 2022-02-28 08:28  飞翔在天  阅读(73)  评论(0编辑  收藏  举报