【发布时间】:2011-12-21 10:32:36
【问题描述】:
我在一些博客和一些与优化有关的文章中阅读了如何优化查询。我读到我需要使用索引并确保使用良好的关系数据库架构正确设置所有主键和外键。
现在我有一个需要优化的查询,我在EXPLAIN 上得到了这个:
Using where; Using temporary; Using filesort
我正在使用 MySQL 5.5
我知道我正在使用WHERE,但不是我的临时表或文件排序?这是什么意思?
【问题讨论】:
我在一些博客和一些与优化有关的文章中阅读了如何优化查询。我读到我需要使用索引并确保使用良好的关系数据库架构正确设置所有主键和外键。
现在我有一个需要优化的查询,我在EXPLAIN 上得到了这个:
Using where; Using temporary; Using filesort
我正在使用 MySQL 5.5
我知道我正在使用WHERE,但不是我的临时表或文件排序?这是什么意思?
【问题讨论】:
使用临时意味着MySQL需要使用一些临时表来存储执行查询时计算的中间数据。
使用文件排序是一种排序算法,其中 MySQL 无法使用索引进行排序,因此无法在内存中进行完整排序。相反,它将排序分成更小的块,然后合并结果以获得最终排序的数据。
请参考http://dev.mysql.com/doc/refman/5.0/en/explain-output.html。
我认为您可能正在使用 ORDER BY 加上一些派生表或子查询。如果您可以粘贴查询和相关的表/索引信息以及 EXPLAIN 输出,那就太好了。
【讨论】:
语法:
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查询
【讨论】: