У меня проблема с производительностью, у меня есть столбец сценического факта с примерно 2 миллионами записей с ~ 40 столбцами бизнес-ключей измерений, которые представляют собой хэши sha1 - varbinary (20). Мой запрос выглядит так:
select isnull(dim1.surkey,0)
,isnull(dim2.surkey,0)
-- 40 surrogate keys here
-- some measures
from stage_fact sf
left join dim1 on sf.dim1businesskey = dim1.businesskey
left join dim2 on sf.dim2businesskey = dim2.businesskey
-- 40 joins here
Это при наличии около 2 миллионов тестовых данных - занимает около 8 минут. На производстве может быть около 10 миллионов данных каждый месяц. Это способ замедления для наших нужд.
Есть ли способ как улучшить его?
В каждой таблице измерений уже есть некластеризованные индексы, содержащие суррогатный ключ и бизнес-ключ.
Я попытался поместить все столбцы businesskey в индекс columnstore, но это не помогает. Также я попытался добавить 40 некластеризованных индексов в каждый из столбцов businesskey в stage_fact - это занимает около 2 минут, но все равно не влияет на производительность (оптимизатор в любом случае выполняет сканирование таблиц).
Буду благодарен за любые идеи по улучшению этого запроса.
С уважением,
EDIT:
План выполнения запроса здесь:
План выполнения