Допустим есть MySQL, а в ней таблица. А в таблице логи неких событий, пусть это события прихода бабосов пользователям.
ID USER_ID AMOUNT TIME
10 1234 100 2015-10-23 12:00:00
Юзер #1234 разжился 100 условными единицами в полдень.
Таблица средненьких размеров. Например, пара миллионов записей.
Нужно иметь возможность делать выборки:
- Общая сумма, которую юзер с заданным ID получил с 15 марта по 25 июля
- Построить график для пользователя за последний год, усредняя по дням или по неделям.
Ну и чтобы эти выборки проходили за приемлимое время.
Собственно, вопросы
Может есть какая сторонняя приблуда для подобных целей?
Либо может можно сделать волшебный запрос с группировками, который бы отработал за нормальное время?
Положение осложняется тем, что выборка по времени + user_id, а обвешивать индексами таблицу в которую часто инсертят, тоже хз насколько умно.Первое что пришло в голову, вспомогательная таблица:
user_id
type - тип периода (month, week, day)
begin - начало периода
sum - сумма
Нужна сумма с 15 марта по 25 июля - тянем month за апрель, май и июнь, а также нужные week из марта и июля + дни, которые не вошли в эти недели.
Если каких-то периодов нет, то их уже расчитываем выборкой из основной таблицы.
Плюс отдельно хранить ID логов, которые соответствуют началам определённых дней, чтобы не делать индекс на time.
Такое извращение.