美文网首页
MySQL之order by

MySQL之order by

作者: 田真的架构人生 | 来源:发表于2017-08-17 09:38 被阅读0次

在mysql里面,order by有两种实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将取得的数据在内存中进行排序。
1,利用有序索引进行排序,实际上就是当我们 Query 的 ORDER BY 条件和 Query 的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 rang、 ref 或者 index 的时候,MySQL 可以利用索引顺序而直接取得已经排好序的数据。这种方式的 ORDER BY 基本上可以说是最优的排序方式了,因为 MySQL 不需要进行实际的排序操作。

2、通过相应的排序算法,将取得的数据在内存中进行排序方式,MySQL 需要将数据在内存中进行排序,所使用的内存区域也就是我们通过 sort_buffer_size 系统变量所设置的排序区。这个排序区是每个 Thread 独享的,所以说可能在同一时刻在 MySQL 中可能存在多个 sort buffer 内存区域,如果并发数很高,很可能存在性能瓶颈。
这种方式在执行计划中被称为filesort。在 MySQL 中 filesort 的实现算法实际上是有两种,一种是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在 sort buffer 中进行排序。另外一种是一次性取出满足条件行的所有字段,然后在 sort buffer 中进行排序。
在 MySQL4.1 之前只有第一种排序算法,第二种算法是从 MySQL4.1才开始支持,主要目的是为了减少第一种算法中需要两次访问表数据的 IO 操作,将两次变成了一次,但相应也会耗用更多的 sort buffer 空间。MySQL 主要通过比较设定的系统参数 max_length_for_sort_data 的大小和 Query 语句所取出的字段类型大小总和来判定需要使用哪一种排序算法。如果 max_length_for_sort_data 更大,则使用第二种优化后的算法,反之使用第一种算法。所以如果希望 ORDER BY 操作的效率尽可能的高,尽可能将max_length_for_sort_data 、sort buffer调高。

相关文章

  • MySQL之order by

    在mysql里面,order by有两种实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将...

  • mysql之order by

    order by就是排序。 --排序查询Extra 这个字段中的“Using filesort”表示的就是需要排序...

  • 你的Order By执行起来为什么这么这么慢

    MySQL order by 执行流程 在工作中使用order by再平常不过了,但是对于mysql order ...

  • MySQL之ORDER BY同一个字段,不同值排序

    MySQL之ORDER BY同一个字段,不同值排序 通常情况下,在MySQL中我们可以使用ORDER BY对一个或...

  • MySQL 之ORDER BY FIELD

    在使用MySQL的排序时,可能需要根据某个字段取值的特定顺序来进行排序。此时,我们就可以使用ORDER BY FI...

  • mysql:group by,order by

    mysql:group by,order by order by order by是用于支持字段的关键字 表结构如...

  • 维表join

    kafka topic为order中数据格式 mysql order_detail表ddl order_detai...

  • 常用的语句

    更新:order误用order 是mysql的关键字,是用来排序的,oreder by desc;使用order做...

  • Mysql | order by

    在开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求,例如下列的sql select city,...

  • MySQL - order by

    实验例子 市民表 假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。SQ...

网友评论

      本文标题:MySQL之order by

      本文链接:https://www.haomeiwen.com/subject/ngrgrxtx.html