Как ускорить запрос 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
Единственный способ ощутимо ускорить COUNT, это не использовать COUNT, для определенных задач есть альтернативы, например если COUNT нужен вам для постраничной навигации, то можно выбирать число страниц больше нужного в n раз + 1 и на основании этого делать пагинацию.
Пример:
В таблице 700000 записей, нам нужно вывести десятую страницу с 10 записями с постраничной навигацией: выбираем не 10, а 41 запись (не забываем про офсет), выводим 10, но благодаря тому, что выбралась 31 запись вперед, мы знаем что еще есть как минимум 4 страницы на которые можно отобразить ссылки.
When used with a subquery, the word IN is an alias for = ANY. Thus, these two statements are the same:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);