Qmysql解释查询理解

我已经阅读了一些博客和一些与优化相关的文章,如何优化查询。我读过,我需要使用索引,并确保所有的主键和外键都使用良好的关系数据库模式正确设置。现在我有一个查询需要优化,我在EXPLAIN

上得到这个。
Using where; Using temporary; Using filesort

我正在使用mysql 5.5

我知道我在使用WHERE,但不使用临时表或文件排序?这是什么意思?

2012-09-06 11:13:39  T Zengerink
  • 4
    粘贴查询。 – DRapp Nov 3 '11 at 18:12

A回答

  • 1

    使用临时表意味着mysql需要使用一些临时表来存储执行查询时计算出的中间数据。

    使用filesort是一种排序算法,mysql无法使用索引进行排序,因此无法在内存中进行完整的排序。相反,它将排序分解成更小的块,然后合并结果以获得最终排序的数据。

    请参阅http://dev.mysql.com/doc/refman/5.0/en/explain output.html>http://dev.mysql.com/doc/refman/5.0/en/explain output.html

    我认为您可能正在使用order by加上一些派生表或子查询。如果您能粘贴查询和相关的表/索引信息以及解释输出,那就太好了。

    2011-11-03 18:23:34  Abhay
    • 感谢您提供的信息 – Ken Nov 3 '11 at 18:44
  • 2

    语法:

    Explain `MySQL Query`
    

    示例:EXPLAIN SELECT * FROM categoriesG

    示例:EXPLAIN EXTENDED SELECT City.Name FROM City JOIN Country ON (City.CountryCode = Country.Code) WHERE City.CountryCode = 'IND' AND Country.Continent = 'Asia'G

    接着解释mysql查询

    这里有更详细的说明