Loading

MySQL 使用索引扫描来做排序

MySQL有两种方式可以生成有序的结果,排序或者索引顺序扫描

explain出来的type列值为 index,说明MySQL使用了索引扫描做排序

扫描索引本身很快,只需要从一条索引记录移动到紧接的另一条索引记录

但如果索引不能覆盖查询所需要的全部列

必须每扫描一条索引记录都回表查询一次对应的行,这种基本都随机IO

尤其在IO密集型工作负载时,所以按索引顺序读取数据的速度通常比顺序全表扫描慢

MySQL可以使用同一个索引既满足排序,又用于查找行

只有当索引列顺序和 ORDER BY 子句顺序完全一致时,所有列的排序方向一致,MySQL可以使用索引对结果做排序

如果查询需要关联多张表,只有当 ORDER BY 子句引用的字段全部为第一张表时,才能用索引排序

前导列为常量时,ORDER BY 子句可以不满足索引的最左前缀

使用rental_date索引为下面查询做排序,没有出现filesort操作

索引第一列提供常量,使用第二列进行排序,也能形成最左前缀

关联时使用索引排序的失效情况

posted @ 2021-10-26 09:41  BigBender  阅读(166)  评论(0编辑  收藏  举报