Агрегирование статистики с очень большой таблицы

Есть очень большая таблица в которой хранятся изменения баланса на счету пользователя пользователя, на данный момент это 250 миллионов строк, мне нужно получить статистику - сумму трат пользователей по полю comment которое представляет из себя enum

например я пробую такой запрс

SELECT sum(up.summ) AS summ, up.comment
FROM user_payments up
WHERE up.date >= '2020-01-01'
  AND up.date <= '2020-02-05'
GROUP BY up.comment

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

так же есть вариант где мне нужно отфильтровать статистику только по пользователям которые имеют платежи. Я для этого использую подзапрос

and user_id in (SELECT distinct sub_up.user_id
                FROM user_payments sub_up
                WHERE sub_up.comment = 'paid_subscription')

Что приводит к еще большим затратам времени.

Я пробовал так же использовать if в запросе для того что бы избавиться от GROUP BY, но это не очень помогло

SELECT sum(IF(up.comment = 'domain_search', up.summ, 0)) AS domain_search

Существуют ли способы оптимbзировать запрос?


Ответы (0 шт):