mysql索引失效的情况及其原因

mysql索引失效的情况及其原因?

答:

  1. 条件查询使用了or关键字且部分字段没有使用索引,则会走全表扫描。(如果两边的字段都有索引的话,那么索引就不会失效)。
  • 因为MySQL优化执行计划目标都是出于成本考虑,那么我们就对比下用索引和不用索引的成本好了。
  • 不用索引一次全表扫描完事,使用索引的话,结果是全表扫描+索引扫描+merge,代价更大
  1. 使用左模糊查询,
  • 其实很好理解,索引就像字典中的目录。一般目录是按字母或者拼音从小到大,从左到右排序,是有顺序的。我们在查目录时,通常会先从左边第一个字母进行匹对,如果相同,再匹对左边第二个字母,如果再相同匹对其他的字母,以此类推。通过这种方式我们能快速锁定一个具体的目录,或者缩小目录的范围。但如果你硬要跟目录的设计反着来,先从字典目录右边匹配第一个字母,这画面你可以自行脑补一下,你眼中可能只剩下绝望了,哈哈。
  1. 字符串条件没有使用 ‘’
  • 因为这涉及到一个隐式类型的转换问题,int类型加不加引号都会走索引,但是,varchar类型不加的话,就走全表扫描
    根据mysql官网上解释,字符串’1’、’ 1 '、'1a’都能转换成int类型的1,也就是说可能会出现多个字符串,对应一个int类型参数的情况。那么,mysql怎么知道该把int类型的1转换成哪种字符串,用哪个索引快速查值?
  1. 不符合最左前缀原则的查询
  • 最左原则,就是要最左边的优先存在,我不在的话,你们自己就玩不动了,除非你自己单独创立一个索引。
  1. 索引列不独立是指 被索引的这列不能是表达式的一部分,不能是函数的参数。
  2. 索引字段没有添加 not null 约束 使用is null 条件 不能使用索引,只能全表扫描了
  3. 索引列使用了函数
  4. 范围条件之后的索引会失效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西瓜程序设计

您的打赏将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值