Задать вопрос
@hebrian_vasyl
Веб-разработчик

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

Здравствуйте. Есть таблица, которая содержит 7 000 000 записей.
Структура таблицы следующая:
id - int(11)
login - cgar(32)
status - tinyint(4)
date1 - datetime
date2 - timestamp
date3 - datetime

Мне нужно вытащить все status и кол-во логинов, которые соответствуют каждому статусу
Вот такой запрос:
SELECT COUNT(*) as count, status FROM users GROUP BY status

выполняется примерно 10 секунд. Как его можно ускорить?
  • Вопрос задан
  • 6519 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
sim3x
@sim3x
SELECT COUNT(*) as count, status FROM users WHERE status = %status_id%

group by дорогая операция

для дальнейшего разбора запости EXPLAIN запроса
www.sitepoint.com/using-explain-to-write-better-my...

ИМО вешать триггер на таблицу с большим количеством апдейтов не очень хорошо
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Таблица по status проиндексирована?
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
count довольно дорогая операция.

Сделайте отдельную таблицу для аггрегированных данных: status tinyint, count int. Поддерживать актуальность данных пачкой триггеров: на insert увеличиваете счётчик нужного status, на update уменьшаете OLD.status и увеличиваете NEW.status, на delete уменьшаете status.
Ответ написан
Ваш ответ на вопрос

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

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