我有一个性能问题,我有一个阶段事实列,其中包含大约200万条记录,其中包含约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
这大约需要200万测试数据-大约需要8分钟。在生产中,每个月可能有大约1000万个数据。这是减慢我们需求的方法。
有什么方法可以改善它吗?
每个维度表中都有包含代理密钥和业务密钥的非聚集索引。
我试图将所有businesskey列都放在columnstore索引中,但这无济于事。我还尝试在stage_fact的每个businesskey列上添加40个非聚集索引-这大约需要2分钟,但仍然对性能没有帮助(优化器仍然执行表扫描)。
对于改进此查询的任何想法,我将不胜感激。
最诚挚的问候,
编辑: 在这里查询执行计划: Execution Plan