2
我试图为SSIS查找组件找到一些性能良好的Tsql等价物。特别是对于事实表加载。TSQL vs SSIS查找
几个不同的查询模式之后的最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:1m14s TSQL:1m0s
,这将是影响如果我选择在SSIS TSQL的更大的数据集(+ 100M行) 目前我测试了这一个200GB的RAM服务器,所以没有问题,在装修上的一切记忆。
但是,我想如果这个查询将用于一台RAM较少的机器上,它将开始溢出到磁盘并严重损害性能。 SSIS在记忆方面会更有效率。我在这个假设上正确吗?
我想到的另一个想法是使用一个游标循环来做到这一点,只用tsql来做例子,当时所有数据都被加载。通过这样做,你将有更少的机会获得内存不足,并开始浪费到磁盘。这是一种可行的方法,还是看到其他方法? PS:我完全意识到SSIS是实际加载表格的方式。但是,让我们假设我们只需要TSQL。