1、定义
MySQL查询通过索引进行排序。当不能使用索引生成排序结果的时候,MySQL就需要自己进行排序。如果数据量小则在内存中进行,如果数据量大则需要使用磁盘,MySQL将这个过程称为文件排序(filesort)。
2、排序缓冲(sort_buffer)
“ 排序”这个动作,可能在内存中完成,也可能需要使用外部排序,这取决于排序所需的内存和参数 sort_buffer_size。sort_buffer_size,就是 MySQL 为排序开辟的内存(sort_buffer)的大小。
如果要排序的数据量小于 sort_buffer_size,排序过程就在内存中完成,MySQL会使用内存进行“快速排序”操作。
如果排序数据量大于 sort_buffer_size,内存放不下,则不得不利用磁盘临时文件辅助排序(归并排序)。MySQL会先将数据分块,对每个独立的块使用“快速排序”进行排序,并将各个块的排序结果存放在磁盘上,然后将各个排好序的块进行合并(merge),最后返回排序结果。
3、Explain信息中Extra字段解释
- Using temporary,表示的是需要使用临时表。
- Using filesort,表示的是需要执行排序操作。
- Using index,表示的就是使用了覆盖索引。