索引失效问题整理

    在面试的时候,数据库方面的问题对于开发人员来说,是绕不过的一个点,而数据库方面,很少直接面试SQL怎么写,而是问效率相关的问题,索引是提高查询效率的一种手段,但是往往,我们容易忽略的一个问题就是索引失效。

    我以前面试,人家问我索引失效,我没反应过来,心想我创建了索引,查询就完事了,怎么会失效呢?后来才知道,索引创建成功,如果查询的时候,选择的字段或者查询的条件设置不合理,虽然能够出结果,但是索引是失效的,这就是索引失效的情形。

    下面来总结一下,索引失效的情况,有点小复杂。

  1. 对于联合索引,违背索引最左前缀原则。
  2. 对索引列使用函数。
  3. 对索引列作运算操作(条件右边使用运算符,索引会生效)。
  4. 使用like关键字,并以'%'开始(使用'%'结尾索引是生效的)。
  5. 使用不等于操作符<>。
  6. 使用not null。
  7. 使用or,or两边的列索引名称不一样,而且一个有索引,另一个没有索引。(or两边的列相同或者都有索引会生效)。
  8. 索引列存在类型转换。

    从运行sql角度来验证这些失效的情况。首先,我们要准备表,其次,建立对应的索引,最后查询的时候,使用explain执行计划,查看运行结果。   

     联合索引,左列前缀 

    从截图可以看出,对emp表创建联合索引(name,age,salary)

    1)、当使用全部索引时,用到了索引;

    2)、当不使用最左列name时,索引失效。

  &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值