理解Explain命令输出中的filesort

转自简朝阳:http://isky000.com/database/do-you-really-understand-filesort

前段时间看了 mysqlperformance blog 上一篇关于 filesort 的文章 ,看到 Percona 公司在招聘面试的时候常问应聘者“Explain 命令输出中的 filesort 的含义是什么”这个问题,而且基本上都得不到正确的答案,甚感奇怪。

按理这是非常基础的内容了,既然敢于去 Percona 这样高手如云的公司应聘,不应该不清楚这个问题吧。

所以我也试探性的问了 MySQL圈子 中的几位朋友这个问题,结果和 Percona 所遇到的情况基本一样,仅有 1/10 的朋友真正明白 filesort 的含义,而且给出的错误答案也都和 Percona应聘者的答案差不多:是 mysql 在进行排序的时候,临时表太大,超出 MySQL 限制,需要将数据写出到磁盘文件中进行排序,所以称之为filesort。

这个“貌似正确”的答案,大部分都是因为 “filesort” 这个词的字面含义所误导猜测出来的。看来并不仅仅只有中国人喜欢“望文生义”,老外也是一样嘛!

那 Explain 命令输出信息中的 filesort 到底是什么意思呢?其实很简单,就是告诉你 MySQL 需要进行实际的排序操作而不能通过索引获得已排序数据。

个人觉得上面的错误答案其实至少错了以下两点:

  • filesort(其实就是排序) 可不一定会产生临时表哦
  • filesort 与临时表数据写入磁盘是没有任何直接联系的

上面两点错误中第一点在 MySQL Performance Blog 的文章中也提到了。

实际上,在我之前的一篇文章 MySQL ORDER BY 的实现分析 中已经很清楚的分析了 MySQL 在进行排序的时候,只有当返回的数据和排序条件不在同一个表中的时候,才需要使用到临时表。

学技术,真的是要非常严谨才行,如果我们仅仅通过字面意思来猜想其含义,而不仔细阅读文档并分析实验,很多时候得到的答案可能都是错误的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值