我试图为SSIS Lookup组件找到一些表现良好的Tsql等价物。特别是对于Fact表加载。
在几种不同的查询模式之后,最好的obv表现得最好:
INSERT INTO Fact WITH (TABLOCK)
SELECT
F.Attribute1,
...
d1.DimAId,
d2.DimBId,
d3.DimCId,
...
F.Amount
...
from Staging.dbo.GeneralLedger F WITH(NOLOCK)
LEFT OUTER JOIN DimA1 d1 WITH(NOLOCK)
on d1.AId = F.AId
LEFT OUTER JOIN DimB d2 WITH(NOLOCK)
on d2.BId = F.BId
LEFT OUTER JOIN DimC d3 WITH(NOLOCK)
on d3.CId = F.CId
性能方面我用500万行测试了它,并查找了9个维度。
SSIS:1分14秒 TSQL:1m0s
如果我在较大的数据集(+ 100M行)上选择SSQL而不是SSIS,那将是什么影响? 目前我在200GB的RAM服务器上进行了测试,因此在内存中安装所有内容都没有问题。
但是,我想如果这个查询将在ram较少的机器上使用,它将开始溢出到磁盘并严重损害性能。 SSIS在记忆方面更有效率。我对这个假设是否正确?
我想到的另一个想法是使用游标循环来执行此操作,仅使用tsql执行1M行的示例,直到加载所有数据。通过这样做,你将有更少的机会获得内存不足并开始浪费磁盘。这是一种可行的方法,还是看到其他任何方法?
PS:我完全清楚SSIS是事实表加载的方法。但是,让我们假设我们只想要TSQL。
答案 0 :(得分:0)
不要使用游标来获取如此大量的数据。你的系统响应很慢你最好用ssis