总结MySQL 下索引失效的情况

其实 一直没有总结什么情况下索引失效,写代码时候,也是看看 那种方式快就使用 那种方式,在加索引的时候,也是 随便 加上去 ,以为就可以了。。。这样不对的。

  1. where 条件的 xxx != xx 这种情况 ,索引是无效的, 和 = 不一样的

  2. where 条件的 in / or 查询, 也是 索引 无效的, 特别是 or ,能不用就不用, 可以使用 union 联合查询来替代,, union 下面 索引是有效的。

  3. where 里面 使用 函数,,也是 索引无效的。 或者对索引列进行运算,运算包括(+,-,*,/,! 等)

  4. 如果WHERE子句的查询条件里使用了比较操作符LIKE和REGEXP,MYSQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKE 'abc%',MYSQL将使用索引;如果条件是LIKE '%abc',MYSQL将不使用索引。比如: 前导模糊查询不能利用索引(like '%XX'或者like '%XX%')

  5. 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

  6. null 查询 索引无效; 更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本

没Null值,不能利用到索引,只能全表扫描。

  1. 在JOIN操作中(需要从多个数据表提取数据时),MYSQL只有在主键和外键的数据类型相同时才能使用索引,否则即使建立了 索引也不会使用

  2. 在ORDER BY操作中,MYSQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。尽管如此,在涉及多个数据表的查

  3. 不使用NOT IN和<>操作 NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。

转载于:https://my.oschina.net/ouminzy/blog/1186285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值