mysql最左前缀原则学习笔记,in也可以走索引

通过我的测试得出的结论:
如果索引是(a,b,c)那么不只是a,ab,abc可以走索引,像是bc.acb,bca都可以走索引,or < > between and甚至是in都也是可以走到索引的。(我在很多文章看到说in不能走索引,包括在面试中,面试官也觉得不会走索引的,这个也能跟mysql的版本有关系,下来再去研究下)
在google我找到这样的解释
在这里插入图片描述
百度上说:
1,
在这里插入图片描述
2,
在这里插入图片描述
mysql版本:8.0.18
在这里插入图片描述
sql:

建立索引:
ALTER TABLE student ADD INDEX index_student (NAME,weight,height);

验证最左优先原则:
执行:EXPLAIN SELECT * FROM student WHERE NAME = ‘xiaohong’
可以看到走了索引
在这里插入图片描述
EXPLAIN SELECT * FROM student WHERE NAME = ‘xiaohong’ AND weight > 120
在这里插入图片描述
这样肯定能走索引,再来看一个ba组合
EXPLAIN SELECT NAME,weight,gender FROM student WHERE weight > 120 AND NAME = ‘xiaohong’
在这里插入图片描述
这样要可能走索引,但是这个并不满足最左优先原则
还有cba这样的组合也能走索引 ,有点疑惑,不知道是不是innodb优化了sql
EXPLAIN SELECT NAME,weight,gender FROM student WHERE height = 110 AND weight > 120 AND NAME IN (‘xiaohong’)

在这里插入图片描述
但是cb bc是不能走索引的
在这里插入图片描述

最左优先说会从左向又一次匹配知道遇到> < between and就会停止匹配,

EXPLAIN SELECT * FROM student WHERE NAME = ‘xiaohong’ OR height IN (120,110) OR weight > 120
在这里插入图片描述
竟然这样也可以执行到索引。
单独使用in,
执行EXPLAIN SELECT * FROM student WHERE NAME IN (‘xiaohong’)
在这里插入图片描述

结论:
如果索引是(a,b,c)那么不只是a,ab,abc可以走索引,像是bc.acb,bca都可以走索引,or < > between and甚至是in都也是可以走到索引的。(我在很多文章看到说in不能走索引,包括在面试中,面试官也觉得不会走索引的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值