请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于最左前缀匹配原则

按照老师上课讲的

对应的我这里建立的索引是 (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回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 宝慕林039164 #1
    谢谢翔仔老师解答!
    回复 有任何疑惑可以回复我~ 2019-10-11 09:29:20
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号