MySql教程

mysql排序总结

本文主要是介绍mysql排序总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


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设计的排序算法。堆排序是不稳定的。

总结:
桶排序、计数排序、基数排序:非比较排序,空间换时间,排序的字段可以是字符串、数字,整形可以这三者,字符串只能用桶排序,如下:
select student_id,sum(score) from mark group by student_id;
select t2.name,sum(t1.score) from mark t1
inner join student t2 on t2.id=t1.student_id
group by t2.name;
堆排序:如
order by xxx limit xxx; 

MySQL排序原理与案例分析:https://www.cnblogs.com/cchust/p/5304594.html

这篇关于mysql排序总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!