索引失效问题排查

本文介绍了如何通过SQL执行计划排查索引失效问题,重点关注type、possible_keys、key字段。分析了可能导致索引失效的各种情况,如索引列参与计算、函数操作、使用OR、LIKE、隐式类型转换、不等于比较、IS NOT NULL和IN操作。同时讨论了ORDER BY在不同数据量下的索引使用情况。
摘要由CSDN通过智能技术生成

通过SQL执行计划explain排查

重点关注typekeyextra这三个字段。
命令格式:explain SQL语句
例如:

explain select * from `mytable` where name like 'leaso%n';

如果有用到索引,那么是走了覆盖索引?还是索引下推?还是扫描了整颗索引树?或是用到了索引跳跃扫描呢?
一般来说,比较理想的走索引的话,应该是一下几种情况:
首先:key一定是要有值的,不能是NULL
其次:type应该是refeq_refrangeconst等这几中类型。
最后:查看extra,如果是NULLUsing indexUsing index condition都是可以的。

如果通过执行计划查看发现一条SQL没有走索引,比如:type = ALLkey = NULLextra = Using where
可能有以下几种可能导致没走索引:
1.没有正确创建索引:查询语句where条件中的字段,没创建索引,或不符合最左前缀匹配。
2.索引区分度不高:索引区分度不够高那么也不会走索引。
3.表太小:表数据库量小,优化器认为扫描全表的成本也不高的时候,也可能不会走索引。
4.查询语句中,索引字段因为用到了函数、类型不一致导致的索引失效。

可能导致索引失效的情况

索引列参与计算

-- 使用索引
explain select * from `mytable` where age = 12 ;
-- 使用索引
explain select * from `mytable` where age = 12 +1 ;
-- 不能使用索引  字段中增加了函数操作
explain select * from `mytable` where age + 1 = 12;

对索引列进行函数操作

-- 使用索引
explain select * from `mytable
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值