Mysql的文件排序(filesort)
1、什么是文件排序?
文件排序,也叫 filesort ,通常我们在Mysql中使用explain关键字时就可以看到如下所示,在Extra列中就是文件排序。
含义:文件排序的含义是排序的过程将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一 般也是要考虑使用索引来优化的。
2、缓存区 sort buffer
Mysql会给sql语句的执行过程提供一块缓存区,叫 sort buffer ,这个区域的默认大小为1m,放在内存中,但是可以通过如下参数修改。具体有什么用,请看下面:
max_length_for_sort_data
3、单双路排序
文件排序一般分为两种方式,一种是单路排序,一种是双路排序,两种的区别,请看下面:
3.1、单路排序
单路排序的意思是在一条sql语句查询时,会将需要查询的字段以及需要排序的字段全部拿出来,放到上面所说的 sort buffer 这个区域中,进行排序,前提是可以放的下。
3.2、双路排序
当上面在 sort buffer 中放不下的时候,就会进行双路排序,双路排序是只拿出需要排序的字段以及主键id去 sort buffer 中排序,排好序之后进行回表操作,访问主键聚簇索引,再进行数据的获取。