我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中filesort指的是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中filesort指的是什么

本篇内容介绍了“mysql中filesort指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在mysql中,filesort是指文件排序,是通过相应的排序算法,将取得的数据在内存中进行排序。filesort分两种:1、双路排序,是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer 中进行排序;2、单路排序,是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序。

在MySQL中的ORDER BY有两种排序实现方式:

1. 利用有序索引获取有序数据
2. 文件排序(filesort)

在explain中分析查询的时候,利用有序索引获取有序数据显示Using index ,文件排序显示 Using filesort。

只有当ORDER BY中所有的列必须包含在相同的索引,并且索引的顺序和order by子句中的顺序完全一致,并且所有列的排序方向(升序或者降序)一样才有,(混合使用ASC模式和DESC模式则不使用索引)

where语句 与 order by 语句组合满足最左前缀

mysql中filesort指的是什么

在其他的情况下 使用 文件排序如下:

      1) where语句与order by语句,使用了不同的索引

  2) 检查的行数过多,且没有使用覆盖索引

  3) ORDER BY中的列不包含在相同的索引,也就是使用了不同的索引

  4) 对索引列同时使用了ASC和DESC

  5) where语句或者ORDER BY语句中索引列使用了表达式,包括函数表达式

  6) where 语句与ORDER BY语句组合满足最左前缀,但where语句中查找的是范围。

filesort

这个 filesort 并不是说通过磁盘文件进行排序,而只是告诉我们进行了一个排序操作。即在MySQL Query Optimizer 所给出的执行计划(通过 EXPLAIN 命令查看)中被称为文件排序(filesort)

  文件排序是通过相应的排序算法,将取得的数据在内存中进行排序: MySQL需要将数据在内存中进行排序,所使用的内存区域也就是我们通过sort_buffer_size 系统变量所设置的排序区。这个排序区是每个Thread 独享的,所以说可能在同一时刻在MySQL 中可能存在多个 sort buffer 内存区域。

filesort分两种

  • 双路排序:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer 中进行排序。排序后再吧查询字段依照行指针取出,共执行两次磁盘io。

  • 单路排序:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序。 执行一次磁盘io。

MySQL主要通过比较我们所设定的系统参数 max_length_for_sort_data的大小和Query 语句所取出的字段类型大小总和来判定需要使用哪一种排序算法。如果 max_length_for_sort_data更大,则使用第二种优化后的算法,反之使用第一种算法。所以如果希望 ORDER BY 操作的效率尽可能的高,一定要主义max_length_for_sort_data 参数的设置。曾经就有同事的数据库出现大量的排序等待,造成系统负载很高,而且响应时间变得很长,最后查出正是因为MySQL 使用了传统的第一种排序算法而导致,在加大了max_length_for_sort_data 参数值之后,系统负载马上得到了大的缓解,响应也快了很多。

如果order by的子句只引用了联接中的第一个表,MySQL会先对第一个表进行排序,然后进行联接。也就是expain中的Extra的Using Filesort.否则MySQL先把结果保存到临时表(Temporary Table),然后再对临时表的数据进行排序.此时expain中的Extra的显示Using temporary Using Filesort.

“mysql中filesort指的是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql中filesort指的是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中filesort指的是什么

本篇内容介绍了“mysql中filesort指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在mysq
2022-11-30

mysql中的filesort问题怎么解决

在MySQL中,filesort是指MySQL使用文件进行排序操作。通常情况下,filesort是由于MySQL无法使用索引进行排序而导致的,可能是因为查询语句中没有合适的索引,或者索引失效等原因。解决filesort问题的方法有以下几种
mysql中的filesort问题怎么解决
2024-05-22

mysql中SQL指的是什么

这篇文章主要介绍了mysql中SQL指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、SQL是结构化查询语言。DML 数据操纵语言 用来操作数据库中所包含的数据
2023-06-15

mysql中gtid指的是什么

在MySQL中,GTID(Global Transaction Identifier)是一种全局事务标识符。它是由MySQL服务器自动生成和分配的唯一标识符,在分布式环境中用于跟踪和恢复事务。每个GTID由三个部分组成:GTID域标识符(G
mysql中gtid指的是什么
2024-04-09

mysql中signed指的是什么

在MySQL中,signed是一种数据类型修饰符,用于指定整数数据类型的符号属性。当一个整数列被声明为signed时,它可以存储正数、负数和零。signed修饰符可以与整数数据类型一起使用,如INT、INTEGER、SMALLINT、TIN
mysql中signed指的是什么
2024-04-09

nchar在mysql中指的是什么

这篇文章主要介绍“nchar在mysql中指的是什么”,在日常操作中,相信很多人在nchar在mysql中指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nchar在mysql中指的是什么”的疑惑有所
2023-05-25

mysql中is null指的是什么

这篇文章主要介绍“mysql中is null指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql中is null指的是什么”文章能帮助大家解决问题。在my
2023-05-25

mysql指的是什么

这篇文章主要介绍了mysql指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP MySQL 简介:通过 PHP,您可以连接和操作数据库。 MySQL 是跟 PHP
2023-06-15

编程热搜

目录