search 2013 adfgs
作者:Sky.Jian | 可以任意转载, 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明
链接:http://isky000.com/database/do-you-really-understand-filesort | del.icio.us | Twitter it

前段时间看了 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 在进行排序的时候,只有当返回的数据和排序条件不在同一个表中的时候,才需要使用到临时表。

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

, , ,

已经有17个回复

  1. jacky Says @ 09-03-20 5:07 pm

    mysql不懂,不过看起来很牛!

  2. flycondor Says @ 09-03-20 5:55 pm

    http://www.mysqlperformanceblog.com/2006/06/06/are-larger-buffers-always-better/
    如果把这篇文章中的内容补充一下,关于filesort的解释就比较完整了

  3. 神仙 Says @ 09-03-20 6:39 pm

    只能说mysql的这个输出结果不合理。
    不需要看文档就能弄明白含义才是最好的。通常来说,只有对结果产生困惑的时候才会去翻文档。而这个filesort恰恰显的很“清晰”.

  4. 免费空间 Says @ 09-03-31 4:09 pm

    看明白了一部分..

  5. 迅雷6下载 Says @ 09-04-10 11:17 am

    好像很久不更新了呢.

  6. 朝阳 Says @ 09-04-10 1:44 pm

    @迅雷6下载
    最近忙于新书的修订以及相关项目,已经很久没有更新 Blog 了,本来有好几篇文章想写一下的,是在抽不出时间,不过放心,后续肯定会将想写的内容全部写出来的。谢谢关注 :)

  7. 金融危机 Says @ 09-04-16 11:44 am

    催更新来了 嘎嘎嘎~~ 你写的文章都很技术 不错

  8. 灵修若木 Says @ 10-08-25 11:22 pm

    这个Explain去年到今年初用的太多了,就是优化查询之必备工具,filesort可不能按字面意思去解释,实际就是没有用到索引的意思,这样的sql效率当然是往后靠了。

Trackbacks & Pingbacks

  • DBA world

    你理解Explain命令输出中的filesort了么…

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

  • 《MySQL性能调优与架构设计》推荐序-From 翟振兴 » Blog Archive 中国MySQL Rss聚合

    [...] 理解Explain命令输出中的filesort [...]

  • MySQL 数据库性能优化之SQL优化 - ubuntu,debian,redhat -linuxany.com

    [...] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 [...]

  • MySQL 数据库性能优化之SQL优化 | OurMySQL | 我们致力于一个MySQL知识的分享网站

    [...] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 [...]

  • MySQL 数据库性能优化之SQL优化 - 北极狐的博客-专注于互联网-电子商务-SNS-系统架构-服务器集群-DBA

    [...] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 [...]

  • MySQL数据库性能优化【四】:SQL | 早睡晚起

    [...] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 [...]

  • » MySQL 数据库性能优化之SQL优化 - Sky.Jian – i Sky000 - 简朝阳

    [...] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 [...]

  • MySQL数据库性能优化之SQL优化 - 数据库教程 - 开发者第1603865个问答

    [...] filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort [...]

  • mysql优化 | 乔帮主博客

    […] 执行计划中有 filesort 就会进行磁盘文件排序 有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。 实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。 延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍 […]

看完了要说点啥么?