加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL Order By 排序

发布时间:2022-10-18 23:01:06 所属栏目:MySql教程 来源:网络
导读: 在使用 order by 的时候会经常遇到 Using temporary 和 Using filesort,带着两个标志的查询代价往往会比较大。在设计的时候,要尽量避免这种情况。
排序算法
我们使用下面的 SQL 语句来举

在使用 order by 的时候会经常遇到 Using temporary 和 Using filesort,带着两个标志的查询代价往往会比较大。在设计的时候,要尽量避免这种情况。

排序算法

我们使用下面的 SQL 语句来举例说明

SELECT id, qid, title, summary from t_topic_post order by qid;

第一种是所有字段直接在内存中进行排序,排序完成后直接返回。

这要求内存能够放下所有的字段,尤其是 SELECT 选择的字段比较多的情况。这种算法的思路就是尽可能多地利用内存,避免回表查询。

这种情况在内存中参与排序的字段就包括 id, qid, title, summary,排序完成后的结果就是需要的结果

第二种是在内存中仅存放参与排序的字段和主键,排序完成后通过主键回表查询其他的 SELECT 值,然后返回。

这种情况子内存中参与排序的字段就只有 id,qid,通过 qid 排好序之后,然后再通过 id 回表查询 title,summary 字段。

上面的两种情况使用的是归并排序算法,数据会被分成多个文件,然后用归并算法进行处理。MySQL 其实还支持优先级队列的算法

当我们 limit 的个数比较少时,我们不需要整一个完全排序后的结果mysql排序,然后去排序结果的前 limit 个。而是直接使用优先级队列,创建一个 limit 大小的堆结构。

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!