order by两种排序方式

MySQL中的order by有索引排序和文件排序两种方式。

一.索引排序(useing index)

如果order by的条件和where的查询条件符合最左匹配原则,且order by的排序字段都属于二级索引,且所有字段都是默认的asc排序,不能混合的asc或者desc,此时的order by使用索引排序;

二.文件排序(useing file_sort)

MySQL中order by的文件排序是根据sort_buff_size系统变量设置的排序区,在内存中排序,每个线程独享一个排序区。如果排序字段大于设置的max_length_for_sort_data,则使用双路排序,否则使用单路排序。

1.单路排序:一次性取出满足条件的所有字段,然后在sort_buff中排序;

2.双路排序:先根据条件取出相应的排序字段和主键id,然后在sort_buff中排序,排序后根据主键id回表从所有的字段中找到需要的字段;


版权声明:本文为weixin_43442127原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。