前段时间看了 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 在进行排序的时候,只有当返回的数据和排序条件不在同一个表中的时候,才需要使用到临时表。
学技术,真的是要非常严谨才行,如果我们仅仅通过字面意思来猜想其含义,而不仔细阅读文档并分析实验,很多时候得到的答案可能都是错误的。

del.icio.us
mysql不懂,不过看起来很牛!
http://www.mysqlperformanceblog.com/2006/06/06/are-larger-buffers-always-better/
如果把这篇文章中的内容补充一下,关于filesort的解释就比较完整了
只能说mysql的这个输出结果不合理。
不需要看文档就能弄明白含义才是最好的。通常来说,只有对结果产生困惑的时候才会去翻文档。而这个filesort恰恰显的很“清晰”.
看明白了一部分..
好像很久不更新了呢.
@迅雷6下载
最近忙于新书的修订以及相关项目,已经很久没有更新 Blog 了,本来有好几篇文章想写一下的,是在抽不出时间,不过放心,后续肯定会将想写的内容全部写出来的。谢谢关注
催更新来了 嘎嘎嘎~~ 你写的文章都很技术 不错
这个Explain去年到今年初用的太多了,就是优化查询之必备工具,filesort可不能按字面意思去解释,实际就是没有用到索引的意思,这样的sql效率当然是往后靠了。