摆脱"使用临时;使用filesort"

Jas*_*ett 10 mysql sql query-optimization

当我对我的查询做一个解释时

在此输入图像描述

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

如果你想查看我的查询,这里是一个更普遍的问题,我问同一个查询:MySQL查询优化和一个菜鸟的EXPLAIN.作为参考,查询涉及24个表和23个连接.

我现在的问题是:

  • "使用临时"和"使用filesort"是什么意思?
  • 假设它们很糟糕,我该如何摆脱它们?

Gal*_*alz 7

如前所述,"使用filesort"和"使用临时"并不总是意味着糟糕的性能.

以下是一些用于提高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也可以对其他查询产生负面影响-特别是考虑它们设置为你需要他们,让他们在默认情况下,所有其他会话的会话.