Как ускорить запрос SELECT count?

Как ускорить запрос SELECT count(*) FROM table WHERE any_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)?
Записей в таблице 700 000 +, индекс на any_id тоже есть, но запрос выполняется примерно 2-3 сек.
База данных mariadb 10+, таблица типа InnoDB
  • Вопрос задан
  • 1863 просмотра
Пригласить эксперта
Ответы на вопрос 5
Demetriy
@Demetriy
веб и мобильная разработка
Единственный способ ощутимо ускорить COUNT, это не использовать COUNT, для определенных задач есть альтернативы, например если COUNT нужен вам для постраничной навигации, то можно выбирать число страниц больше нужного в n раз + 1 и на основании этого делать пагинацию.

Пример:
В таблице 700000 записей, нам нужно вывести десятую страницу с 10 записями с постраничной навигацией: выбираем не 10, а 41 запись (не забываем про офсет), выводим 10, но благодаря тому, что выбралась 31 запись вперед, мы знаем что еще есть как минимум 4 страницы на которые можно отобразить ссылки.
Ответ написан
Комментировать
@shagguboy
предрасчитывать всё это при insert/update
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
попробуйте IN заменить на ANY.
Ответ написан
mahoho
@mahoho
Full stack certified PHP developer.
Попробуйте
SELECT count(*) FROM table WHERE any_id BETWEEN 1 and 9
Ответ написан
Таблица со счётчиками, обновлять либо триггерами, либо из приложения при вставке/удалении, либо по крону, если погрешность допустима.

Можно тип данных для any_id взять поменьше размером, чтоб ужать индекс, но много это не даст.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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