Задать вопрос
@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
  • Вопрос задан
  • 4508 просмотров
Подписаться 2 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы