2014-10-29 94 views
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。

回答

0

不要使用游标来处理如此大量的数据。你的系统响应速度会慢一些,这对你更好用ssis