Агрегирование статистики с очень большой таблицы
Есть очень большая таблица в которой хранятся изменения баланса на счету пользователя пользователя, на данный момент это 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зировать запрос?