Mysql的文件排序(filesort)

1、什么是文件排序?

文件排序,也叫 filesort ,通常我们在Mysql中使用explain关键字时就可以看到如下所示,在Extra列中就是文件排序。
含义:文件排序的含义是排序的过程将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一 般也是要考虑使用索引来优化的。

在这里插入图片描述

2、缓存区 sort buffer

Mysql会给sql语句的执行过程提供一块缓存区,叫 sort buffer ,这个区域的默认大小为1m,放在内存中,但是可以通过如下参数修改。具体有什么用,请看下面:

max_length_for_sort_data

3、单双路排序

文件排序一般分为两种方式,一种是单路排序,一种是双路排序,两种的区别,请看下面:

3.1、单路排序

单路排序的意思是在一条sql语句查询时,会将需要查询的字段以及需要排序的字段全部拿出来,放到上面所说的 sort buffer 这个区域中,进行排序,前提是可以放的下。

3.2、双路排序

当上面在 sort buffer 中放不下的时候,就会进行双路排序,双路排序是只拿出需要排序的字段以及主键id去 sort buffer 中排序,排好序之后进行回表操作,访问主键聚簇索引,再进行数据的获取。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLfilesort 是一个操作,它在查询中用于处理 ORDER BY 子句或者 GROUP BY 子句。 当MySQL需要按特定字段进行排序或者分组时,它必须按照指定的条件来检索数据,并在内存或磁盘上对结果进行排序。这个过程称为filesort。 在进行filesort时,MySQL会将要排序的数据从磁盘加载到内存中去,并使用一种类似快速排序算法的技术对数据进行排序。如果数据量太大无法完全加载到内存中,MySQL可能会使用临时文件进行排序filesort的性能取决于多种因素,包括数据量、可用内存和硬盘性能。如果数据量较小且内存足够,排序操作可以在内存中完成,反之则需要使用临时文件进行辅助排序。 为了优化filesort操作,可以考虑以下几点: 1. 确保查询中的 ORDER BY 或 GROUP BY 子句的字段有适当的索引。索引可以帮助MySQL更快地找到和排序数据。 2. 提高系统的可用内存大小,这样更多的数据可以在内存中进行排序,减少磁盘I/O操作。 3. 根据业务需求,避免不必要的排序操作,比如可以在应用程序中进行排序,而不是完全依赖于数据库。 4. 如果filesort仍然是性能瓶颈,可以考虑分区或者分片等技术来减少排序的数据量。 总之,MySQL中的filesort操作是为了处理排序和分组的需求,通过将数据加载到内存中并排序,以获取更高的查询效率。针对filesort的优化可以提高查询性能,使得排序操作更快、更高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值