index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高。

filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作,至于排序操作是否使用了磁盘文件或临时表等,则取决于MySQL服务器对排序参数的设置和需要排序数据的大小。

一般而言,filesort是通过相应的排序算法,将所取得的数据在sort_buffer_size系统变量设置的内存排序区中进行排序,如果内存装载不下,它就会将磁盘上的数据进行分块,再对各个数据块进行排序,然后将各个块合并成有序的结果集。

sort_buffer_size设置的排序区是每个线程独占的,所以同一时刻,MySQL中存在多个sort buffer排序区。

优化:尽量减少额外排序,通过索引直接返回有序的数据。where 条件和order by 使用了相同的索引,并且order by 的顺序和索引顺序相同,并且order by 的字段都是升序或者降序,否则肯定需要额外的排序操作,这样就会出现 filesort。

以下SQL可以使用索引:

select * from tablename order by key_part1,key_part2,....;

select * from tablename where key_part1=1 order by key_part1 desc,key_part2 desc;

select * from tablename order by key_part1 desc,key_part2 desc;

以下SQL不可以使用索引:

select * from tablename order by key_part1 desc,key_part2 asc;  ----order by 的字段混合asc,desc

select * from tablename where key2=constant order by key1;  ----用于查询的关键字与order by 中所使用的不相同

select * from tablename order by key1,key2;     ----对不同的关键字使用order by

对于Filesort,MySQL有两种排序算法 :

一次扫描算法和两次扫描算法,通过比较系统变量max_length_for_sort_data的大小和query语句总字段的大小来判断使用哪种排序算法。

适当增加 max_length_for_sort_data的值,适当增加sort_buffer_size排序区,尽量使用具体的字段而不是select * 选择所有字段。

在CPU和IO之间平衡。

mysql中两次排序_MySQL中的两种排序方式: index和filesort相关推荐

  1. mysql内嵌插入语句_MySQL中添加或插入语句(Insert)的几种使用方式

    MySQL中添加或插入语句(Insert)的几种使用方式 1.INSERT 简写方式插入数据(不推荐) 1.先看一下表中有那些数据 2.使用Inset into 表名 values(值1,值2)进行插 ...

  2. MySQL中添加或插入语句(Insert)的几种使用方式

    1.各大培训机构,价格10万的视频 Java架构师视频免费送 2.各种电子书籍经典Java书籍免费送 3.关注下方我的公众号进行免费获取 MySQL中添加或插入语句(Insert)的几种使用方式 1. ...

  3. N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式

    题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式. 输入: 输入包括一个整数N. 输出: 可能有多组测试数据,对于每组数据, 输出当楼梯阶数是N时的上楼方式个数. 样例输入: 4 ...

  4. el-select样式两种修改方式index.html或popper-append-to-body加popper-class

    el-select样式两种修改方式index.html或popper-append-to-body加popper-class 记录一下,博主整理的很是明朗,在此记录一下,方便以后查找,感谢博主的输出, ...

  5. mysql自动排序_MySQL中的排序

    文章正文: 在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化? 索引排序 索引排序指的是在通过索引查询时就 ...

  6. mysql group语句可以排序_MySQL中group_concat()函数的排序方法

    示例一 group_concat()函数的参数是可以直接使用order by排序,下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高 ...

  7. mysql union如何排序_Mysql中UNION用法与排序

    最近也是在写项目中碰到的这个问题,需要将两个SELECT查询结果组合起来进行分组排序,想到了用union方法,用TP的union操作根本无法完成复杂的union操作,于是搜罗了一下,先说一下union ...

  8. mysql教程排序_MySQL中的排序函数field()实例详解

    前言 我们在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris',' ...

  9. mysql 子查询怎么写_MySQL中两种子查询的写法

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

最新文章

  1. 清除距今天7天的日志
  2. Java中static关键字总结
  3. index 把@前的截断作为
  4. 机器人抓取方式,值得研究。
  5. 网站服务器令牌获取,adobe - 获取Adobe Sign访问令牌以进行服务器到服务器身份验证 - 堆栈内存溢出...
  6. 因 inode 不足导致数据库登陆报错相关问题
  7. Python数据分析学习笔记:使用SciKit-Learn进行数据规范化
  8. 纯干货 | UI界面中按钮设计汉堡按钮\菜单
  9. 201521123054 《Java程序设计》 第2周学习总结
  10. Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2
  11. 自动刷新徐小明股市直播内容
  12. 逆向分析商业软件 010 Editor 及注册机编写
  13. 基于51单片机定时,数码管显示时间
  14. SpringMVC实现全局异常处理器
  15. WP_支持XP的Windows Phone开发环境搭建:“文字+视频”教程(五)
  16. [k8s]如何处理dockerfile无expose情况下在k8s里暴漏访问
  17. java设置excel密码
  18. 第三十四章 数论——高斯消元解线性方程组
  19. 计算机基础16秋在线作业,16秋华师《计算机基础》在线作业
  20. 惠普dl20g9服务器系统分区,HPE DL20 Gen10 服务器

热门文章

  1. C语言函数返回1和返回0究竟哪个好?
  2. C语言项目:绽放的玫瑰花
  3. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  4. python文件运行哪一个_如何使一个python文件运行另一个?
  5. 在线画 有穷状态自动机 的软件_怎么画思维导图?不用下载软件,在线就能操作...
  6. win10打开计算机黑屏怎么办,教你如何解决win10电脑开机黑屏的问题
  7. 多模光纤收发器的应用领域及适用领域
  8. 【渝粤题库】广东开放大学 秘书理论与实务 形成性考核
  9. Android布局怎么画图形,Android开发者的图形化布局
  10. gNB,ng-eNB和NR