mysql的单路排序和双路排序

单路排序:

查询数据时,将所有要查询的数据全部加载到内存中进行排序。

双路排序:

查询数据时,只是将排序字段和记录ID加载到内存中,排好序后在根据id回表加载数据。

单路排序占用内存大,但效率高,因为排好序后就已经是可以返回的结果了。

双路排序占用内存少,但效率要比单路排序低,因为排好序后还要回表加载数据。

如下图中的查询:

 

 采用单路排序时,因为查询的是所有字段,会将所有字段加载到内存中,然后按照sal排序。

采用双路排序就是将主键(EMPNO)和SAL加载到内存中,按照SAL字段排好序,在根据主键去回表加载数据。

 

mysql内部是通过比较max_length_for_sort_data(默认1024字节)这个系统变量跟需要排序的字段长度比较来判断采用哪种排序的。

如果需要排序的字段总长度小于max_length_for_sort_data,则采用单路排序。

如果需要排序的字段总长度大于max_length_for_sort_data,则采用双路排序。

posted @ 2022-09-19 19:52  牙刷丢了  阅读(523)  评论(0)    收藏  举报