mysql 不走索引 总结

在MySQL中,索引并不总被使用。例如,索引列参与计算、使用函数、使用Like '%XXX'(后缀)或正则表达式时,以及在OR操作中,可能不会利用索引。应避免这些情况,如将计算移到非索引列,避免函数和正则在索引列上,以及使用UNION替换多列OR查询。
摘要由CSDN通过智能技术生成

在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。


现假设有t_stu表,age,sname上建立了索引


索引列参与计算


如果where条件中age列中使用了计算,则不会使用该索引


SELECT `sname` FROM `t_stu` WHERE `age`=20;-- 会使用索引
SELECT `sname` FROM `t_stu` WHERE `age`+10=30;-- 不会使用索引!!因为所有索引列参与了计算

SELECT `sname` FROM `t_stu` WHERE `age`=30-10;-- 会使用索引

 

故,如果需要计算,千万不要计算到索引列,想方设法让其计算到表达式的另一边去。


索引列使用了函数


同样的道理,索引列使用了函数,一样会导致相同的后果


SELECT `sname` FROM `stu` WHERE concat(`sname`,'abc') ='Jaskeyabc'; -- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT `sname` FROM `stu` WHERE `sname` =concat('Jaskey','abc&

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值