mysql中的filesort底层的排序方式总共分成两种,同时也是针对不同的情况而进行设置的。
1、单路排序:这一种排序是将存储的所有字段的信息都从硬盘中读取到缓存文件(sort buffer)之中进行排序。
2、双路排序:也称为回表排序,这种排序方式主要是先在硬盘中筛选出所需要的字段,以及记录本行所对应的id(这里的id可以是主键),在sort buffer中先对其进行排序,当排序完成之后再运用id去硬盘文件中将每一个记录所对应的剩余信息读取到sort buffer之中。
通过这两个排序方法可以清晰的知道,mysql针对每一台计算机的缓存总大小进行了一个优化,如若计算机的缓存较大,便会使用单路排序,这种排序的方法所涉及到的io操作较少,速度较快。当计算机的缓存较小时便会使用双路排序,节省缓存空间。
上述的操作是我们在计算机中为了提升代码的性能,可行度等经常使用的一种方法,就是将空间换时间,或者是时间换空间的想法。