Mysql 排序操作的实现思路

在MySQL中,ORDER BY的实现有如下两种类型:

(1)通过有序索引直接取得有序的数据,不用进行任何排序操作即可满足客户端要求

(2)通过MySQL的排序算法将数据进行排序,再将排序后的数据返回给客户端

通过索引得到有序数据是最理想的,但实际情况中常常会遇到第二种情况

如果没有索引可利用时,MySQL又如何实现排序呢?

MySQL目前可以通过两种算法来实现数据的排序操作:

(1)取出满足过滤条件、并作为排序条件的字段,及其行指针信息,在Sort Buffer中进行实际的排序操作,然后根据行指针信息到表中取得其他字段的数据,再返回给客户端

(2)根据过滤条件,一次取出排序字段及需要的其他字段,并将不须要排序的字段存放在一块内存区域中,然后在 Sort Buffer中对排序字段进行排序,最后再用排序后的行指针到内存区域中找到其他字段,合并成结果集返回给客户端

第一种排序算法是MySQL一直以来就有的,而第二种则是从MySQL 4.1版本才开始增加的改进版排序算法。第二种的主要优势就是减少了数据的二次访问。在排序之后不须要再一次回到表中取数据,节省了IO操作。当然,会消耗更多的内存,这正是一种典型的通过内存空间换取时间的优化方式

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏知识图谱

创建分布式图数据库JanusGraph对象

37130
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列8

? 一、heap和stack有什么区别 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。 栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 ...

32150
来自专栏JAVA高级架构

Java设计模式--单例模式

24040
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列16-jdbc、hibernate、流、线程实现、多态、继承事程序执行顺序等

1 JDBC,Hibernate 分页怎样实现? 方法分别为: 1) Hibernate 的分页: Query query = session.createQ...

29730
来自专栏null的专栏

挑战数据结构和算法——整数的二进制表示中1的个数

题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。 ? 问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作...

34060
来自专栏小筱月

单例模式 实现

上面那种直接在方法上加锁的方式其实不够好,因为在方法上加了内置锁在多线程环境下性能会比较低下,所以我们可以将锁的范围缩小

64320
来自专栏Android知识点总结

06--图解数据结构之并查集

12730
来自专栏小二的折腾日记

day5(面向对象2)

用来将文件或文件夹封装成对象。 方便对文件与文件夹的属性信息进行操作。 File对象可以作为参数传递给

6910
来自专栏Python爱好者

Java基础笔记19

16460
来自专栏全华班

java学习手册-JAVA程序员笔试题(一)

JAVA程序员笔试题(一) 一、选择题: 1、类的成员变量要求仅仅能够被同一package下的类访问,应该使用哪个修辞词 A. Protected、B. Pub...

44850

扫码关注云+社区

领取腾讯云代金券