两种排序方式

1). 第一种是通过对返回数据进行排序,也就是通常说的 filesort 排序,所有不是通过索引直接返回排序结果的排序都叫 FileSort 排序。

2). 第二种通过有序索引顺序扫描直接返回有序数据,这种情况即为 using index,不需要额外排序,操作效率高


多字段排序



了解了MySQL的排序方式,

优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。

where 条件和Order by 使用相同的索引,并且Order By 的顺序和索引顺序相同,

并且Order by 的字段都是升序,或者都是降序

否则肯定需要额外的操作,这样就会出现FileSort。



Filesort 的优化

通过创建合适的索引,能够减少 Filesort 的出现,但是在某些情况下,条件限制不能让Filesort消失,那就需要加快 Filesort的排序操作。对于Filesort , MySQL 有两种排序算法:

1)两次扫描算法:MySQL4.1 之前,使用该方式排序。首先根据条件取出排序字段和行指针信息,然后在排序区sort buffer 中排序,如果sort buffer不够,则在临时表 temporary table 中存储排序结果。

完成排序之后,再根据行指针回表读取记录,该操作可能会导致大量随机I/O操作。

2)一次扫描算法:一次性取出满足条件的所有字段,然后在排序区 sort buffer 中排序后直接输出结果集。排序时内存开销较大,但是排序效率比两次扫描算法要高。

MySQL 通过比较

系统变量 max_length_for_sort_data 的大小和Query语句取出的字段总大小,

来判定是否那种排序算法,

如果max_length_for_sort_data 更大,那么使用第二种优化之后的算法;

否则使用第一种。

可以适当提高 sort_buffer_size 和 max_length_for_sort_data 系统变量,来增大排序区的大小,提高排序的效率。

SQL优化—— 优化order by语句 || Filesort 的优化相关推荐

  1. MySQL Order by 语句用法与优化详解

    Order by语句是用来排序的,经常我们会使用到Order by来进行排序,下面我给大家来讲讲Order by用法与优化排序,有需要的同学可参考 MySQL Order By keyword是用来给 ...

  2. 通过索引优化含ORDER BY的MySQL语句

    核心提示:合理的建立索引能够加速数据读取效率,不合理的建立 索引反而会拖慢数据库的响应速度,索引越多,更新数据的速度越慢,当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺 ...

  3. mysql索引 order by_MySQL 通过索引优化含ORDER BY的语句

    合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度. 关于建立索引的几个准则: 1.合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度. 2.索 ...

  4. mysql order by 语句_Mysql优化order by语句的方法详解

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的老少爷们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引 ...

  5. MySQL——优化ORDER BY语句

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的朋友们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引顺 ...

  6. MySQL中order by语句的实现原理以及优化手段

    相信很多人在面试过程中,总被问到有没有 SQL 调优经验,对于工作经验年限较少的求职者,通常都是在面试之前从网上百度一些答案,提前背熟,然后面试的时候直接将提前背好的答案说出来.笔者作为一名菜鸟,在刚 ...

  7. 【重要】MySQL中order by语句的实现原理以及优化手段

    写在前面 filesort排序算法参考 :https://blog.csdn.net/lijingkuan/article/details/70341176 双路排序:是首先根据相应的条件取出相应的排 ...

  8. SQL SERVER全面优化-------写出好语句是习惯

    前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...

  9. SQL语句及索引优化

    一.Count()和Max()的优化方法 1.查询最后支付时间-优化max()函数 1)语句:select max(payment_date) from payment; 2)查看执行计划:expla ...

最新文章

  1. Fedora 24 Alpha带着Gnome 3.20姗姗来迟
  2. 脂肪肝,应该拿你怎么办
  3. AIX 操作系统日常维护须知
  4. 数据中心网络架构 — 传统数据中心网络 — 胖树型三层网络架构
  5. 谷歌搜索没有相机图标_谷歌Pixel 2/3a/4 XL中招!更新安卓11相机崩溃
  6. 【机器学习基础】时间序列基本概念
  7. 『设计模式』以为是个王者,后来班主任来了!设计模式--二五仔的观察者模式
  8. eval() php,js-eval编码,js-eval解码
  9. scp和ssh如何连接指定端口的远程主机
  10. lombok之@Slf4j注解
  11. Laravel框架学习笔记(一)——phpstudy下的安装配置
  12. 智慧城市路在何方?合肥三十万重金诚邀大数据英才!
  13. c++中的堆(优先级队列 priority_queue)
  14. python 量化模型_量化策略 | Python tqsdk — GhostTrader模型!(附代码)
  15. 你知道手动探针台系统的用途及组成部分吗?
  16. java下载天地图数据,天地图离线地图,可指定经纬度范围
  17. spyder的变量窗口显示不全
  18. c#mvc模式进行crud_实用的微服务开发模式:CRUD与。 CQRS
  19. java 文件移动_java 文件移动
  20. Ubuntu云安装桌面版

热门文章

  1. Hadoop记录-metastore jmx配置
  2. 电脑新安装JDK版本并运行使用该JDK版本问题
  3. iOS之一个iOS开发人员完整的学习路线
  4. jQuery 下拉框应用 拓展
  5. Kali 找回root 密码的操作步骤
  6. i春秋30强挑战赛pwn解题过程
  7. 根据html页面模板动态生成html页面(c#类)
  8. Linux下安装搜狗拼音输入法
  9. ( 流水账1)周五--liphi--校服的联想
  10. 工作总结20190121