当前位置:网站首页>mysql排序总结
mysql排序总结
2022-08-09 00:11:00 【yigg】
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
边栏推荐
猜你喜欢
随机推荐
最新7篇数据科学/深度学习/CNN/知识图谱/文本匹配等中英文综述论文推介(附下载)
对于js中apply和call的区别和用法
记一次“粗暴”的Flash模拟EEPROM法(用的STM32F030C6芯片,没找到模拟EEPROM库函数)
Flutter -自定义日历组件
关于如何快速筛选素数的问题
C#中构造函数的作用
JS基础知识
小程序textarea完美填坑
蓝桥杯历届试题-合根植物(并查集)
GaN图腾柱无桥 Boost PFC(单相)三(预测模型)
AcWing 173 矩阵距离 bfs
穿越派·派盘+KeePass = 最安全的私人密码管理方案
菲涅尔反射
整流八--电网不平衡状态下三相PWM整流器的控制策略
Zotero+派盘=私有云盘(大学生必备学习软件)
MVC与MVP的区别
穿越派(v3.14)版本可以试用啦!
牛客练习赛88 补题
Anaconda 使用 Navigator 安装 Tensorflow(包括 Anaconda 安装)
vspm虚拟串口调试