为了能到远方,脚下的每一步都不能少.|

lmyyyy

园龄:2年8个月粉丝:7关注:10

9月11日总结

慢SQL原因分析之索引失效
现象

最近收到一个慢sql工单,慢sql大概是这样:“select xxx from tabel where type = 1”。

咦,type字段明明有索引啊,为啥是慢sql呢?
原因

通过执行explain,发现实际上数据库执行了全表扫描,从而被系统判定为慢sql。这时有一定开发经验的同事会说:“字段区分度不够,这种字段作单独索引是没有意义的”。那么为什么会产生索引失效这种情况呢?索引失效都有哪些情况呢?
索引失效概括

下面总结了若干索引失效的情况:
不满足最左匹配

假如表中有个组合索引,idx_start_org_code_start_province_id_trans_type,它的索引顺序如下:

start_org_code,

start_province_id,

trans_type

当我们从第二个索引字段开始查询时就不会走索引:

因为索引是BTree结构的,不能跳过第一个索引直接走第二个索引
索引列上有计算

当我们用主键做条件时,走索引了:

而当id列上面有计算,比如:

可以看到走了全表扫描
索引列上有函数

有时候我们在某条sql语句的查询条件中,需要使用函数,比如:截取某个字段的长度:

你有没有发现,在使用该函数之后,该sql语句竟然走了全表扫描,索引失效了
字段类型不同

在sql语句中因为字段类型不同,而导致索引失效的问题,很容易遇

本文作者:lmyyyy

本文链接:https://www.cnblogs.com/lmyy/p/17719627.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起