@mihalich

Долго выполняются запросы с сортировкой (2-5 сек вместо 0.1-03)

Долго выполняются запросы вроде

SELECT SQL_NO_CACHE news.*, news_category.name AS category FROM news, news_category WHERE news.news_category_id = news_category.id AND news_category.id != 114 AND create_date < CURRENT_DATE AND FIND_IN_SET(50, news.region_ids) AND news.active_status = 1 AND news_category.active_status = 1 ORDER BY id DESC LIMIT 3

И даже так — добавление сортировки к любому запросу ведёт к непропорциональному увеличению времени его выполнения.

Таблицы — MyISAM

В чем может быть дело?
Прямо ступор какой-то.

Настройки тут — www.cottage.ru/mysql-params.txt (utf-8)

Сервер php-fpm+nginx
  • Вопрос задан
  • 4417 просмотров
Пригласить эксперта
Ответы на вопрос 5
@himik
что говорит EXPLAIN?
Ответ написан
Сортировка — тяжелая операция, что вас удивляет? Используйте inner join, пробуйте джойнить уже отфильтрованные данные, как-то так:

SELECT SQL_NO_CACHE news.*, news_category.name AS category FROM news
INNER JOIN news_category ON (news.news_category_id = news_category.id AND news_category.id != 114 AND news_category.active_status = 1)
WHERE AND create_date < CURRENT_DATE AND FIND_IN_SET(50, news.region_ids) AND news.active_status = 1
ORDER BY id DESC LIMIT 3

Ну и индексы не помешают.
Ответ написан
gaelpa
@gaelpa
Чтобы сортировка не тормозила запросы, нужно чтобы был доступен индекс, начинающийся с полей по которым производится сортировка и опционально продолжающийся полями фильтрации. У вас такой есть?
Ответ написан
NeX
@NeX
Попробуйте увеличить sort_buffer_size и покажите dev.mysql.com/doc/refman/5.6/en/show-profile.html для запроса
Ответ написан
Комментировать
@mihalich Автор вопроса
В итоге решили проблему так — вынесли tmdir (временную директорию) в оперативку, и все наладилось.
Профилирование запроса показало, что бОльшую часть времени занимает Copying to tmp table
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы