请稍等 ...
×

采纳答案成功!

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

为什么不符合最左匹配原则?

EXPLAIN select * from user where deptId=1;
1 SIMPLE user index age 41 106131 Using where; Using index

EXPLAIN select * from user where age=1;
1 SIMPLE user ref age age 5 const 1 Using index

ddl
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
age int(11) DEFAULT NULL,
deptId varchar(11) DEFAULT NULL,
PRIMARY KEY (id),
KEY age (age,deptId) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=105819 DEFAULT CHARSET=utf8;

和视频中的最左匹配原则对不上呢?,为什么单独用deptId查询时,还是能用到索引呢

正在回答 回答被采纳积分+3

1回答

翔仔 2019-02-16 23:50:14

同学好,当不用最左边的搜索的时候,可以注意看看它的possible keys为null。但是实际运行的时候,sql 解析器会按照它的最优方式去检索,它解析你的key先按照age走效率更高,也能查出数据,所以最左匹配只是一个原则,实际还要依赖于解析器的判断,

这里的Extra是Using where; Using index,key是age,表明发生了索引扫描,因为where条件不是最左列的缘故,其性能也是差于key为ref的

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

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

帮助反馈 APP下载

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

公众号

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