Если вы выполняете запросы min / max / avg, предпочитаете ли вы использовать таблицы агрегации или просто выполнять запросы в диапазоне строк в необработанной таблице?
Это, очевидно, очень открытый вопрос, и нет единственно правильного ответа, поэтому я просто ищу общие предложения людей. Предположим, что таблица необработанных данных состоит из временной метки, числового внешнего ключа (скажем, идентификатора пользователя) и десятичного значения (скажем, суммы покупки). Кроме того, предположим, что в таблице миллионы строк.
Я сделал и то, и другое. С одной стороны, таблицы агрегации дали мне значительно более быстрые запросы, но за счет увеличения числа дополнительных таблиц. Для отображения текущих значений агрегированного диапазона необходимо либо полностью вернуться к таблице необработанных данных, либо объединить более мелкозернистые агрегаты. Я обнаружил, что отслеживание в коде приложения, какой таблицы агрегации запрашивать, когда это больше работы, о которой вы могли бы подумать, и что потребуются изменения схемы, поскольку исходных диапазонов агрегации всегда будет недостаточно («Но я хотел посмотреть, наши продажи за последние 3 периода оплаты! ").
С другой стороны, запросы из необработанных данных могут быть очень медленными, но позволяют мне быть очень гибкими в отношении диапазонов данных. Когда границы диапазона меняются, я просто меняю запрос, а не перестраиваю таблицы агрегации. Аналогично, код приложения требует меньше обновлений. Я подозреваю, что если бы я был умнее в отношении своей индексации (то есть всегда имел хорошие индексы покрытия), я мог бы уменьшить штраф за выбор из необработанных данных, но это ни в коем случае не панацея.
Могу ли я в любом случае иметь лучшее из обоих миров?