order by关键字优化
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关键字优化相关推荐
- 8、查询优化-关联查询优化-子查询优化-Order by 关键字优化-Group by 关键字优化-双路排序和单路排序
8.查询优化 8.1.准备数据 8.1.1.建表 CREATE TABLE `dept` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`deptName` VAR ...
- mysql 优化代码_MySQL Order by 语句优化代码详解
Order by语句是用来排序的,经常我们会使用到Order by来进行排序,下面我给大家来讲讲Order by用法与优化排序,有需要的同学可参考 MySQL Order By keyword是用来给 ...
- MySQL高级- group by ,order by 索引优化
一:索引失效 1. 2.最佳左前缀法则 4. 8. 使用覆盖索引解决这个问题. 二.索引优化 1.ORDER BY 子句,尽量使用Index方式排序,避免使用FileSort方式排序 MySQL支持两 ...
- [转载]如何用关键字优化网站?
如何用关键字优化网站? 搜索引擎使用关键字的相关程度来决定网页的先后顺序.例如,如果有人搜索" butterbeans ",那么一个标题为" the butterbean ...
- SEO关键字优化策略-Google Analytics提高关键字转化的的6步骤
流量很大,却没有转化,是非常糟糕的. SEO工作的目的是持续的搜索流量来到我们的网站,这也意味着我们工作的成效,但是流量数据不会告诉你访问者来到你网站所进行的有价值的 session.我们运营网站的目 ...
- Oracle的order by关键字
文章目录 一.生成测试数据 二.order by的语法 三.版权声明 order by关键字用于对查询的结果集进行排序. 我们通过示例来介绍order by关键字的用法. 一.生成测试数据 用以下SQ ...
- order是mysql系统关键字_MySQL数据库如何使用“ORDER BY”关键字对查询结果进行排序呢?...
摘要: 下文讲述MySQL数据库中ORDER BY 关键字的用法简介说明,如下所示: ORDER BY 关键字的功能及语法说明 ORDER BY 功能: 对select 查询出的结果采用指定字段 指定 ...
- 【淘宝SEO技巧】淘宝宝贝标题关键字优化
淘宝宝贝标题关键字优化技巧 今天我们来分析一下淘宝关键字优化技巧,掌握搜索排名规则对新手店铺来说是非常有用的,它可以帮你带来想不到的生意.现在我们来讲讲其中的做生意的学问.使用什么办法能使你的店铺增加 ...
- 2012淘宝关键字优化淘宝关键字SEO优化助手|淘宝关键字SEO优化
淘宝关键字优化技巧,掌握搜索排名规则对新手店铺来说是非常有用的,它可以帮你带来想不到的生意.现在我们来讲讲其中的做生意的学问.使用什么办法 能使你的店铺增加人气?采取什么策略让你的宝贝在成千上万的同类 ...
最新文章
- Cisco ××× 完全配置指南-连载-IPSec
- 2012 BI市场(一)
- oracle成本岗,ORACLE的成本管理.doc
- memcpy和strcpy的区别 ?
- 使用选择器语法来查找元素 - 你想使用类似于CSS或jQuery的语法来查找和操作元素...
- Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
- 利用异步I/O复制文件及详解
- Ubuntu 14.04开启ssh服务
- 如何用EasyRecovery找回删除的文档(附注册机下载地址)
- 我擦 以后在也不乱去听别人讲座了。。
- dmx512如何帧同步_DMX512协议的前世今生 数据格式及传输简介
- iOS 录音及播放 音波图波形
- c++ vector随机排序
- 常见的9种大数据分析方法
- 畅玩新方式 | Google Play 游戏 Beta 版在 PC 上发布
- Thrift入门学习
- 重庆大学计算机学院毕业设计题目,图像处理毕业设计题目.docx
- 海外社交媒体最佳图片尺寸
- oracle幂函数运算公式,幂函数公式_幂的运算法则公式14个
- VCC(电源)和 GND(地)之间电容的作用
热门文章
- 小小知识点(九)——拉盖尔高斯波束自由空间傍轴近似条件下的复振幅
- 关于手机端适配的问题(rem,页面缩放)
- 美宇航局发现地球“表兄弟” 距离1400光年
- C语言 · 滑动解锁
- cocos2dx-lua 笔记 方向控制 v2
- Java基础知识强化23:Java中数据类型转换(面试题)
- [唐胡璐]QTP框架 - 关键字驱动测试框架之三 - 对象库管理
- 禅道程序员的10条原则--转载--为了不忘
- 前后端混合开发模式和前后端分离开发模式
- faker假数据php,Faker首页、文档和下载 - 生成假数据的 PHP 库