Mysql中单路排序和双路排序详解_自由的辣条的博客-CSDN博客_单路排序和双路排序
文件排序(FileSort)分为两种:
双路排序(又叫回表排序模式):先根据相应的条件取出相应的排序字段和可以直接定位行 数据的行 ID,然后在 sort buffer 中进行排序,排序完后需要再次取回其它需要的字段;
单路排序:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序;
举个例子,下面有一段sql:
select * from user where name = "自由的辣条" order by age
双路排序过程:
MySQL 4.1 之前使用的双路排序,通过两次扫描磁盘得到数据。读取主键id 和 order by 列并对其进行排序,扫描排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
- 从索引 name 找到第一个满足 name = ‘自由的辣条’ 的主键id
- 根据主键 id 取出整行,把排序字段 age 和主键 id 这两个字段放到 sort buffer(排序缓存) 中
- 从索引 name 取下一个满足 name = ‘自由的辣条’ 记录的主键 id
- 重复 3、4 直到不满足 name = ‘自由的辣条’
- 对 sort_buffer 中的字段 age 和主键 i