Отправить заявку

MySQL: Оптимизация запросов с ORDER BY

Обратился клиент с заданием оптимизации запросов. В специфической программе делалась выборка к которой клеилось около 16 таблиц и требовалась сортировка результатов. Запросы достигали времени выполнения больше чем нужно было в десятки раз... Т.е. запрос мог длиться около получаса - и это уже перестало удивлять клиента. Таблицы огромные, навешано кучу ненужных индексов. На каждый запрос генерировалась временная таблица, которая могла весит более 500 мегабайт.

Есть замечательная команда STRAIGHT_JOIN. Она не всегда спасает, но для нас она оказалась весьма полезной. Перестроив индексы и переписав запросы - мы сделали большую часть выборок без временных таблиц, что дало очень приличный рост производительности.

Оптимизатору MySQL можно сказать, чтобы он цеплял таблицы в том порядке, который нам необходим. Для этого мы добавим в SELECT нашу команду STRAIGHT_JOIN.

Краткий пример выборки:

SELECT STRAIGHT_JOIN table1.*, table2.*, table3.*, table4.*,
FROM ******** 
WHERE НАШЕ УСЛОВИЕ
ORDER by table1.`delim_out` LIMIT 300
Другие публикации