我创建了一个表student,结构如下:
然后创建了索引,如下:
CREATE INDEX idx_age_name ON student(age , NAME);
执行下面语句:
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE age = 30 AND stuno <101000 ORDER BY NAME;
结果如下:
在结果中能看到key_len=5,也就是索引idx_age_name只用到了字段age,并没有用到name,那么order by没有使用到索引的话难道不应该进行filesort排序吗,为什么extra中没有显示using filesort?
用到了全表扫描,也是using filesort的情况中一种吧
复合索引是 age + name(复合索引 是从左向右匹配的),因为 age 已在where条件有指定,相当于常量,会使用到索引。
组合索引,根据最左原则,以及优化器,会自动去选择最优的一个执行方案,由于使用了条件常量并且你的name是在最右边,最左边还有一个id的有序索引,所以只有执行了Using where的索引的