Учитывая, что вы пометили этот пост data-warehouse
и datamart
, я могу только предположить, что ваша таблица FT является неким фактом и что запрос выглядит примерно так:
select
CalendarMonth
, sum(x) as Tot_1
, sum(x) * sum(y) as Tot_2
, sum(x) + sum(z) as Tot_3
from FT as f
join dimDate as d on d.DateKey = f.DateKey
join dimUser as u on u.UserKey = f.UserKey
join dimProduct as p on p.ProductKey = f.ProductKey
where CalendarYear between 2008 and 2010
and Country = 'United States'
and ProductCategory = 'Cool Gadget'
and UserGender = 'Female'
group by CalendarMonth ;
Именно так должна выглядеть агрегация по показателям в таблице фактов.
Теперь для целей отчетности кажется, что у вас есть таблица агрегации (FA) для ускорения отчетов. Я могу только догадываться, что склад загружается за ночь и что ваш запрос подготавливает агрегацию иногда утром, до рабочего дня, поэтому он выполняется один раз в день - или, по крайней мере, должен. Если выполнение этого запроса занимает слишком много времени, рассмотрите возможность добавления нескольких ключевых полей в таблицу агрегирования (FA) - обычно DateKey - затем периодически обновляйте таблицу FA.
Например, если у вас есть 10 000 продаж в день, сумма запроса выше ~ 300 000 строк за каждый месяц. Если таблица агрегации агрегируется за день, то для обновления таблицы требуется сумма в 10 000 строк один раз в день, а для отчета - всего 30 строк в месяц.
Подводя итог, можно сказать, что для ускорения запросов по агрегации фокусируются на количестве агрегируемых строк, а не на функциях агрегирования. Также убедитесь, что таблицы измерений имеют индексы для столбцов, упомянутых в предложении WHERE запроса.
Правда, я мог бы предположить, что здесь слишком много, так что это может или не может быть полезным.