1、ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序

2、建表SQL

CREATE TABLE tblA(id int primary key not null auto_increment,age INT,birth TIMESTAMP NOT NULL,name varchar(200)
);INSERT INTO tblA(age,birth,name) VALUES(22,NOW(),'abc');
INSERT INTO tblA(age,birth,name) VALUES(23,NOW(),'bcd');
INSERT INTO tblA(age,birth,name) VALUES(24,NOW(),'def');CREATE INDEX idx_A_ageBirth ON tblA(age,birth,name);SELECT * FROM tblA; 

3、Case

(1)

(2)

4、MySQL支持二种方式的排序,FileSort和Index,Index效率高。它指MySQL扫描索引本身完成排序。FileSort方式效率较低。

5、ORDER BY满足两情况,会使用Index方式排序:

  ORDER BY 语句使用索引最左前列

  使用Where子句与Order BY子句条件列组合满足索引最左前列

  where子句中如果出现索引的范围查询(即explain中出现range)会导致order by 索引失效。

6、尽可能在索引列上完成排序操作,遵照索引建的最佳左前缀

  【小总结】

第二种中,where a = const and b > const order by b , c 不会出现 using filesort b , c 两个衔接上了
但是:where a = const and b > const order by c 将会出现 using filesort 。因为 b 用了范围索引,断了。而上一个 order by 后的b 用到了索引,所以能衔接上 c

7、如果不在索引列上,filesort有两种算法:mysql就要启动双路排序单路排

(1)双路排序

MySQL 4.1之前是使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和orderby列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。

从磁盘取排序字段,在buffer进行排序,再从磁盘取其他字段。

取一批数据,要对磁盘进行了两次扫描,众所周知,I\O是很耗时的,所以在mysql4.1之后,出现了第二种改进的算法,就是单路排序。

(2)单路排序

从磁盘读取查询需要的所有列,按照order by列在buffer对它们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。

(3)结论及引申出的问题

① 由于单路是后出的,总体而言好过双路

② 但是用单路有问题

  在sort_buffer中,方法B比方法A要多占用很多空间,因为方法B是把所有字段都取出, 所以有可能取出的数据的总大小超出了sort_buffer的容量,导致每次只能取sort_buffer容量大小的数据,进行排序(创建tmp文件,多路合并),排完再取取sort_buffer容量大小,再排……从而多次I/O。
  本来想省一次I/O操作,反而导致了大量的I/O操作,反而得不偿失。

(4)优化策略
① 增大sort_buffer_size参数的设置(用于单路排序的内存大小)

② 增大max_length_for_sort_data参数的设置(单次排序字段大小。(单次排序请求))

③ 去掉select 后面不需要的字段(select 后的多了,排序的时候也会带着一起,很占内存,所以去掉没有用的)

Why

提高Order By的速度1. Order by时select * 是一个大忌只Query需要的字段, 这点非常重要。在这里的影响是:1.1 当Query的字段大小总和小于max_length_for_sort_data 而且排序字段不是 TEXT|BLOB 类型时,会用改进后的算法——单路排序, 否则用老算法——多路排序。1.2 两种算法的数据都有可能超出sort_buffer的容量,超出之后,会创建tmp文件进行合并排序,导致多次I/O,但是用单路排序算法的风险会更大一些,所以要提高sort_buffer_size。2. 尝试提高 sort_buffer_size
不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的3. 尝试提高 max_length_for_sort_data
提高这个参数, 会增加用改进算法的概率。但是如果设的太高,数据总容量超出sort_buffer_size的概率就增大,明显症状是高的磁盘I/O活动和低的处理器使用率. 

转载于:https://www.cnblogs.com/116970u/p/10995960.html

order by关键字优化相关推荐

  1. 8、查询优化-关联查询优化-子查询优化-Order by 关键字优化-Group by 关键字优化-双路排序和单路排序

    8.查询优化 8.1.准备数据 8.1.1.建表 CREATE TABLE `dept` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`deptName` VAR ...

  2. mysql 优化代码_MySQL Order by 语句优化代码详解

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

  3. MySQL高级- group by ,order by 索引优化

    一:索引失效 1. 2.最佳左前缀法则 4. 8. 使用覆盖索引解决这个问题. 二.索引优化 1.ORDER BY 子句,尽量使用Index方式排序,避免使用FileSort方式排序 MySQL支持两 ...

  4. [转载]如何用关键字优化网站?

    如何用关键字优化网站? 搜索引擎使用关键字的相关程度来决定网页的先后顺序.例如,如果有人搜索" butterbeans ",那么一个标题为" the butterbean ...

  5. SEO关键字优化策略-Google Analytics提高关键字转化的的6步骤

    流量很大,却没有转化,是非常糟糕的. SEO工作的目的是持续的搜索流量来到我们的网站,这也意味着我们工作的成效,但是流量数据不会告诉你访问者来到你网站所进行的有价值的 session.我们运营网站的目 ...

  6. Oracle的order by关键字

    文章目录 一.生成测试数据 二.order by的语法 三.版权声明 order by关键字用于对查询的结果集进行排序. 我们通过示例来介绍order by关键字的用法. 一.生成测试数据 用以下SQ ...

  7. order是mysql系统关键字_MySQL数据库如何使用“ORDER BY”关键字对查询结果进行排序呢?...

    摘要: 下文讲述MySQL数据库中ORDER BY 关键字的用法简介说明,如下所示: ORDER BY 关键字的功能及语法说明 ORDER BY 功能: 对select 查询出的结果采用指定字段 指定 ...

  8. 【淘宝SEO技巧】淘宝宝贝标题关键字优化

    淘宝宝贝标题关键字优化技巧 今天我们来分析一下淘宝关键字优化技巧,掌握搜索排名规则对新手店铺来说是非常有用的,它可以帮你带来想不到的生意.现在我们来讲讲其中的做生意的学问.使用什么办法能使你的店铺增加 ...

  9. 2012淘宝关键字优化淘宝关键字SEO优化助手|淘宝关键字SEO优化

    淘宝关键字优化技巧,掌握搜索排名规则对新手店铺来说是非常有用的,它可以帮你带来想不到的生意.现在我们来讲讲其中的做生意的学问.使用什么办法 能使你的店铺增加人气?采取什么策略让你的宝贝在成千上万的同类 ...

最新文章

  1. Cisco ××× 完全配置指南-连载-IPSec
  2. 2012 BI市场(一)
  3. oracle成本岗,ORACLE的成本管理.doc
  4. memcpy和strcpy的区别 ?
  5. 使用选择器语法来查找元素 - 你想使用类似于CSS或jQuery的语法来查找和操作元素...
  6. Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
  7. 利用异步I/O复制文件及详解
  8. Ubuntu 14.04开启ssh服务
  9. 如何用EasyRecovery找回删除的文档(附注册机下载地址)
  10. 我擦 以后在也不乱去听别人讲座了。。
  11. dmx512如何帧同步_DMX512协议的前世今生 数据格式及传输简介
  12. iOS 录音及播放 音波图波形
  13. c++ vector随机排序
  14. 常见的9种大数据分析方法
  15. 畅玩新方式 | Google Play 游戏 Beta 版在 PC 上发布
  16. Thrift入门学习
  17. 重庆大学计算机学院毕业设计题目,图像处理毕业设计题目.docx
  18. 海外社交媒体最佳图片尺寸
  19. oracle幂函数运算公式,幂函数公式_幂的运算法则公式14个
  20. VCC(电源)和 GND(地)之间电容的作用

热门文章

  1. 小小知识点(九)——拉盖尔高斯波束自由空间傍轴近似条件下的复振幅
  2. 关于手机端适配的问题(rem,页面缩放)
  3. 美宇航局发现地球“表兄弟” 距离1400光年
  4. C语言 · 滑动解锁
  5. cocos2dx-lua 笔记 方向控制 v2
  6. Java基础知识强化23:Java中数据类型转换(面试题)
  7. [唐胡璐]QTP框架 - 关键字驱动测试框架之三 - 对象库管理
  8. 禅道程序员的10条原则--转载--为了不忘
  9. 前后端混合开发模式和前后端分离开发模式
  10. faker假数据php,Faker首页、文档和下载 - 生成假数据的 PHP 库