【数据库】什么情况会导致索引失效

列与列对比

某个表中,两个列a,b都建立了单独索引,下面这种查询条件不会走索引

select * from test where a = b

这种情况被认为还不如走全表扫描

存在NULL值条件

当只针对一个字段的关于NULL的判断,如果通知再两个字段对NULL进行判断,还是会走全表扫描
比如

select * from table where name is null

假如name有索引,则是走的索引
如果再加一个id

select * from table where name is null or id is null

则会走全表扫描

NOT条件

当查询条件为的时候,执行计划可能更倾向于全表扫描
查询条件有:

  • <>
  • NOT
  • in
  • not exists

LIKE通配符

这里要说一下前查询和后查询

  • 前查询: 类似于%明,查询名字中带明的而且不姓明的
  • 后查询:类似于司%,查询姓司的
    当前查询的时候,更倾向于全表扫描
    所以当业务设计的时候,尽量考虑模糊搜索的问题,要更多使用后置通配符

where条件上包括函数

select * from test where upper(name)='SUNYANG';

这样是不会走索引的,因为查询条件带了索引
当查询条件不带索引的时候,依然可以走索引

select * from test where name=upper('sunyang');
--INDEX RANGE SCAN

数据类型转换

当查询条件存在隐式转换的时候,比如id的类型为int,但是传输的是一个String类型

select * from table where id = '1'

谓词运算

select * from table where id/2 = type_id

参考文章
索引失效的情况有哪些
MySQL_列值为null对索引的影响_实践

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值