MySQL order by的实现

 

1、使用索引的已有顺序

2、filesort算法

  filesort算法的执行流程
   

 

 

filesort相关的参数

sort_buffer_size 
算法排序缓冲区的大小,线程级缓存 
max_length_for_sort_data

决定选择那种不同的策略进行排序(两种排序算法)

1、single-pass算法(rowid排序) 

当查询语句所取出的所有字段的长度大于max_length_for_sort_data,第一次从表中取出排序字段和行指针,第二次根据排好序的行指针从表中取出其它字段的值。优点行数据进行了压缩,缺点需要两次访问表数据

2、two-pass算法(全字段排序) 

当max_length_for_sort_data小于查询语句所取出的所有字段的长度,一次性从表中取出所查询的所有字段,在排序缓冲区中进行排序操作。优点只访问了一次表数据,缺点数据没有进行压缩,会耗用更多排序缓冲区的空间

 

 

 

 

 

 

posted on 2018-12-29 23:07  jiaxin666  阅读(504)  评论(0编辑  收藏  举报

导航