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

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

qq_撞碎南墙_0

2019-02-16

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查询时,还是能用到索引呢

写回答

1回答

翔仔

2019-02-16

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

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

1
0

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

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

8427 学习 · 1870 问题

查看课程