Как стать автором
Обновить

Комментарии 2

Крутая и очень полезная статья, особенно про таблицы с агрегацией, их встретить можно примерно никогда 8(

Если вы не ограничили фрейм, СУБД использует RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, т.е для каждой строки просматривает все предшествующие ей.

Указанное поведение наблюдается только при наличии в определении окна предложения ORDER BY. При его отсутствии используется RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Для скользящего окна в 7 дней достаточно вычесть префикс 7-дневной давности

А если данные таковы, что в датах имеются пропуски? Тогда отсчёт старого префикса не по разности (RANGE), а по количеству (ROWS) ожидаемо вернёт ерунду. А генерация календаря и использование его как ведущей таблицы съест весь профит, или в лучшем случае его изрядную часть.

pre-aggregated таблиц для ускорения расчётов ... Обновляем инкрементально

Обязательно нужно отметить, что данная реализация предрасчёта валидна только для insert-only таблиц. Если же возможны вставки "задним числом", удаления или обновления записей по любому основанию, вплоть до ошибки, то нужно использовать триггерную логику обновления, либо следует предусмотреть процедуру пересчёта значений (всех или только тех, которые задеты указанными операциями, правда, в период от изменения до пересчёта данные в предрасчётной таблице будут невалидны, а результаты выборки из неё некорректны).

Впрочем, существование процедуры пересчёта полезно в любом случае.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий