sql是否会走索引的几种情况

<>BETWEEN走范围索引range。

!=、<>不走索引

(查看表的索引的语句:show keys from 表名)

like 模糊查询 前模糊或者 全模糊不走索引

or条件走不走索引:1、只要有一个条件字段没有添加索引,就不走索引。

比如:explain select * from users u where u.name = 'mysql测试' or u.password ='JspStudy'

password如果没有加所以,这条sql就不会走索引。

2、or 条件都是同一个索引字段,走索引。

比如:explain  select * from users u where u.name= 'mysql测试' or u.name='333'

那么这一天如何使用索引呢?

# 使用 union all 代替 or 这样的话有索引例的就会走索引
explain
select * from users u where u.name = 'mysql测试' 
union
select * from users u where u.password = 'JspStudy'

# in 走索引,但是当in的查询范围比较大的时候,索引可能会失效,走全表扫描

# not in 不走索引

exists会不会走索引?

exists是以外层表为驱动表,会全表扫描,而内层表通过走索引,可以快速判断当前记录是否匹配。
所以用exists主查询会全表扫描,子查询可能会使用索引。

SELECT * FROM `user` WHERE `user`.id IN ( SELECT `order`.user_id FROM `order`)

SELECT `user`.* FROM `user` WHERE EXISTS ( SELECT `order`.user_id FROM `order` WHERE `user`.id = `order`.user_id)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值