摆脱“使用临时;使用filesort”

时间:2011-02-08 16:09:34

标签: sql mysql query-optimization

当我对我的查询进行解释时

enter image description here

我看到它在第一行的“Extra”下面有“Using temporary; Using filesort”。我知道这很糟糕,但我不知道究竟是什么意思或如何解决它。

如果您想查看我的查询,这是我询问的有关同一查询的更一般问题:MySQL query optimization and EXPLAIN for a noob。 作为参考,该查询涉及24个表和23个连接。

我现在的问题是:

  • “使用临时”和“使用filesort”是什么意思?
  • 假设他们不好,我怎么摆脱他们?

1 个答案:

答案 0 :(得分:7)

如前所述,“使用filesort”和“使用临时”并不总是意味着糟糕的表现。

Here是提高ORDER BY语句性能的一些基本指南。亮点:

  

如果要增加ORDER BY速度,请检查是否可以让MySQL使用索引而不是额外的排序阶段。如果无法做到这一点,您可以尝试以下策略:

     

增加尺寸   sort_buffer_size变量。

     

增加尺寸   read_rnd_buffer_size变量。

     

每行使用较少的RAM,只需将列声明为保存存储在其中的值所需的大小。例如,如果值不超过16个字符,则CHAR(16)优于CHAR(200)。

首先尝试使用索引(确保您要排序的字段具有索引)。请注意,增加系统变量sort_buffer_sizeread_rnd_buffer_size也会对其他查询产生负面影响 - 请考虑将它们专门设置为您需要的会话,并将其保留为所有其他会话的默认值。