What does Using filesort mean in MySQL?

原文地址:https://www.percona.com/blog/2009/03/05/what-does-using-filesort-mean-in-mysql/


译文如下:

如果你来Persona面试,那我会问你:在EXPLAIN中using filesort是什么意思?你会怎样回答呢?

直到目前为止,我已经在大量的面试中问到过这个问题,这其中包括一些很聪明的面试者,然而没有一个人能给出其正确的解释。因此我认为这可能并不是一个很好的面试问题,并且现在我想给出关于这个问题的答案。从现在开始,如果还是有人不能解释这个问题,那只能说明他并没有读过我的这篇博文。

人们通常给出的答案,类似于“数据行因为太大(too big)而不能放在内存当中,只能存放在临时表当中”。然而不幸的是,事实并不是这么回事。从给出的这个答案去理解,首先,使用了临时表;其次,如果临时表太大是要将其存放在硬盘上的。但是EXPLAIN并没有给出这个意思。(如果我来面试你,我可能还会问你,你怎么理解"too big"。我可能还会问你,其它导致将临时表存放在磁盘上的原因。)

事实上,filesort本身命名是有问题的。只要一个排序不能使用索引进行排序,那么它就是filesort。它本身和文件无关。filesort应该被称为sort。而它的实现方式是:快速排序(quicksort)。

如果要排序的数据占用的内存的大小比排序缓存(sort buffer)大,那么一次排序就排其中的一部分。最后再将各个块的排序结果进行合并再输出。当然还有很多除此之外其它额外的工作要做。推荐你读一读 Sergey Petrunia’s article on How MySQL executes ORDER BY. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值