关于最左前缀匹配原则

来源:3-9 索引额外问题之最左匹配原则的成因

宝慕林039164

2019-10-08

按照老师上课讲的

对应的我这里建立的索引是 (user_id,number,createtime)

查询语句里又包括:user_id =1 and number>10010 and createtime=“2015-02-04 13:22:35”

按照结论应该是createtime是用不到索引的,为什么这里却使用了索引 myindex呢?

这是所使用到的表
图片描述
添加索引

alter table orders add INDEX `myindex` (`user_id`,`number`,`createtime`)

进行explain分析

explain SELECT * FROM mybatis.orders where user_id =1 and number>10010 and createtime="2015-02-04 13:22:35";

结果不符合预期
图片描述

写回答

1回答

翔仔

2019-10-08

同学好,这里的最左匹配说的是,当我们搜索d,也就是说搜索createtime的时候,是不会用到里面的联合索引的,但是搜索user_id和number的时候,是可以先走相关的索引的,因为(a,b,c)索引就会意味着(a)(a,b)(a,b,c)都能用到它。我们的优化器会利用索引的一部分,剩下的会进行从这些检索到的内容里面继续筛选。

0
1
宝慕林039164
谢谢翔仔老师解答!
2019-10-11
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程