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
Возврат % от покупок

Другие публикации:

Написать комментарий через:

 
               
  • Локальный блог
  •  
 

Ваш отзыв

Имя *

Почта (скрыта) *

Сайт

Напишите цифрами двa вoceмь двa *

Сообщение

 
Статусы для соц.сетей на ArtKiev Design Studio