Задать вопрос
dzheka3d
@dzheka3d

Как уменьшить время выполнения запроса?

Всем привет. У меня есть довольно простой запрос в таблице, в которой всего 50тыс записей:
SELECT count(p.`id`) cnt FROM `posts` p  WHERE p.`category_id` <> 4 AND p.`status` = 1

И он выполняется 30мс.
Таблица innoDb
Индексы category_id + status проставлены

У меня просто нет идей как его ускорить, помогите плз.

UPD: В постах есть фильтр по многим полям, для каждого фильтра и комбинации из них, хранить значение количества не возможно. Поэтому хранить значение количества с пересчетом по триггеру INSERT невозможно
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Делаете отдельную таблицу, в единственном поле и записи которой храните значение этого кол-ва.
Создаете триггеры для таблицы posts на операции вставки, обновления, удаления.
В триггере используете этот запрос на подсчет кол-ва и вставку/обновление этого значения в таблице количеств.
Этим триггером вы переложите 30мс из операции select подсчета кол-ва, на операции insert, update, delete, во время вставки нового значения (обновления категории, статуса, удаления записи), причем в триггере можно игнорировать пересчет, если запись вставляется не того вида (не категория 4 и не статус 1).
Количество особых записей всегда можно получить моментально из той самой таблицы.
Ответ написан
Ваш ответ на вопрос

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

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