MySQL 使用索引扫描来做排序
MySQL有两种方式可以生成有序的结果,排序或者索引顺序扫描
explain出来的type列值为 index,说明MySQL使用了索引扫描做排序
扫描索引本身很快,只需要从一条索引记录移动到紧接的另一条索引记录
但如果索引不能覆盖查询所需要的全部列
必须每扫描一条索引记录都回表查询一次对应的行,这种基本都随机IO
尤其在IO密集型工作负载时,所以按索引顺序读取数据的速度通常比顺序全表扫描慢
MySQL可以使用同一个索引既满足排序,又用于查找行
只有当索引列顺序和 ORDER BY 子句顺序完全一致时,所有列的排序方向一致,MySQL可以使用索引对结果做排序
如果查询需要关联多张表,只有当 ORDER BY 子句引用的字段全部为第一张表时,才能用索引排序
前导列为常量时,ORDER BY 子句可以不满足索引的最左前缀
使用rental_date索引为下面查询做排序,没有出现filesort操作
索引第一列提供常量,使用第二列进行排序,也能形成最左前缀
关联时使用索引排序的失效情况
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里