MySQL ORDERY BY排序算法整理笔记

1:利用索引来避免排序

在需要排序的字段上面建立了合适的索引,或者查询语句中使用的索引字段和排序字段一致;

2:filesort排序

sort_buffer_size:一次性分配设置的内存,决定filesort排序分成多少个thread;

max_length_for_sort_data:决定采用双路还是单路排序

2.1 双路排序:两次IO操作,省内存,费时间。排序采用快速排序,当sort buffer满了之后,放到临时文件中,最后利用归并算法排序;优化:对第二次操作,通过id进行IO取出要查询的字段,这时,对于第二次MySQL本身一个优化,即在捞之前首先将id排序(rowid),并放入缓冲区,这个缓存区大小由参数read_rnd_buffer_size控制,然后有序去捞记录,将随机IO转为顺序IO。

2.2 单路排序:一次取出所有的查询字段和排序字段,费内存,省时间。排序采用快速排序,当sort buffer满了之后,放到临时文件中,最后利用归并算法排序;

2.3 堆排序: 针对order limit M,N设计的排序算法。堆排序是不稳定的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值