MySQL Order By 排序
排序算法
我们使用下面的 SQL 语句来举
在使用 order by 的时候会经常遇到 Using temporary 和 Using filesort,带着两个标志的查询代价往往会比较大。在设计的时候,要尽量避免这种情况。 排序算法 我们使用下面的 SQL 语句来举例说明
※ 第一种是所有字段直接在内存中进行排序,排序完成后直接返回。 这要求内存能够放下所有的字段,尤其是 SELECT 选择的字段比较多的情况。这种算法的思路就是尽可能多地利用内存,避免回表查询。 这种情况在内存中参与排序的字段就包括 id, qid, title, summary,排序完成后的结果就是需要的结果 ※ 第二种是在内存中仅存放参与排序的字段和主键,排序完成后通过主键回表查询其他的 SELECT 值,然后返回。 这种情况子内存中参与排序的字段就只有 id,qid,通过 qid 排好序之后,然后再通过 id 回表查询 title,summary 字段。 ※ 上面的两种情况使用的是归并排序算法,数据会被分成多个文件,然后用归并算法进行处理。MySQL 其实还支持优先级队列的算法 当我们 limit 的个数比较少时,我们不需要整一个完全排序后的结果mysql排序,然后去排序结果的前 limit 个。而是直接使用优先级队列,创建一个 limit 大小的堆结构。 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |