Избавление от «Использование временного; Использование файловой сортировки» - PullRequest
9 голосов
/ 08 февраля 2011

Когда я делаю объяснение по моему запросу

enter image description here

, я вижу, что в первой строке у него есть "Использование временного; Использование файловой сортировки" в разделе "Дополнительно".Я понимаю, что это плохо, но я не знаю, что именно это означает или как это исправить.

Если вы хотите увидеть мой запрос, вот более общий вопрос, который я задавал об этом же запросе: Оптимизация запросов MySQL и EXPLAIN для noob .Для справки, запрос включает в себя 24 таблицы и 23 объединения.

Мои вопросы сейчас:

  • Что означают «Использование временного» и «Использование сортировки файлов»?
  • Если они плохие, как мне от них избавиться?

1 Ответ

7 голосов
/ 12 февраля 2011

Как уже говорилось, "использование файловой сортировки" и "использование временных" не всегда подразумевают плохую производительность.

Здесь - это некоторые основные рекомендации по повышению производительности операторов ORDER BY.Основные моменты:

Если вы хотите увеличить скорость ORDER BY, проверьте, можете ли вы заставить MySQL использовать индексы вместо дополнительной фазы сортировки.Если это невозможно, вы можете попробовать следующие стратегии:

Увеличить размер переменной sort_buffer_size.

Увеличить размер переменной read_rnd_buffer_size.

Использовать меньше оперативной памятидля каждой строки, объявляя столбцы настолько большими, насколько это необходимо для хранения значений, хранящихся в них.Например, CHAR (16) лучше, чем CHAR (200), если значения никогда не превышают 16 символов.

Сначала попробуйте использовать индексы (убедитесь, что поля, по которым вы сортируете, имеют индексы).Обратите внимание, что увеличение системных переменных sort_buffer_size и read_rnd_buffer_size также может оказать негативное влияние на другие запросы - рассмотрите возможность установки их специально для сеанса, для которого они нужны, и оставьте их по умолчанию для всех остальныхсессий.

...