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

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

MySQL запрос:
select `product_id`, count(*) as `cnt`
from `product_prop`
where `prop_id` in (1,2,3,...)
group by `product_id`
order by `cnt` desc


В таблице две колонки `product_id` и `prop_id`.
Индексы: product_id, prop_id, product_id+prop_id уникальный
В таблице 85М записей, будет больше, и если `prop_id` in (1,2,3,...) штук 20, может быть и больше, запрос выполняется 18 секунд, что прям совсем много. Если убрать сортировку, то выполняется моментально, но без неё никак. Пробовал having, но то же самое, что, как бы, и логично.
  • Вопрос задан
  • 2297 просмотров
Подписаться 4 Простой 13 комментариев
Ответ пользователя mayton2019 К ответам на вопрос (7)
mayton2019
@mayton2019
Bigdata Engineer
Можно материализовать. Перечислить все комбинации prop_id и создать такое представление

prop_ids | responce
---------|---------
'1,2,3'  | [ { "prod_001" : 200 }, { "prod_333" : 134 } , ..... ]
'2,3,4'  | [.....]
Ответ написан