当我对我的查询进行解释时
我看到它在第一行的“Extra”下面有“Using temporary; Using filesort”。我知道这很糟糕,但我不知道究竟是什么意思或如何解决它。
如果您想查看我的查询,这是我询问的有关同一查询的更一般问题:MySQL query optimization and EXPLAIN for a noob。 作为参考,该查询涉及24个表和23个连接。
我现在的问题是:
答案 0 :(得分:7)
如前所述,“使用filesort”和“使用临时”并不总是意味着糟糕的表现。
Here是提高ORDER BY语句性能的一些基本指南。亮点:
如果要增加ORDER BY速度,请检查是否可以让MySQL使用索引而不是额外的排序阶段。如果无法做到这一点,您可以尝试以下策略:
增加尺寸 sort_buffer_size变量。
增加尺寸 read_rnd_buffer_size变量。
每行使用较少的RAM,只需将列声明为保存存储在其中的值所需的大小。例如,如果值不超过16个字符,则CHAR(16)优于CHAR(200)。
首先尝试使用索引(确保您要排序的字段具有索引)。请注意,增加系统变量sort_buffer_size和read_rnd_buffer_size也会对其他查询产生负面影响 - 请考虑将它们专门设置为您需要的会话,并将其保留为所有其他会话的默认值。