TSQL与SSIS查找

时间:2014-10-29 19:05:43

标签: sql sql-server tsql ssis

我试图为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。

1 个答案:

答案 0 :(得分:0)

不要使用游标来获取如此大量的数据。你的系统响应很慢你最好用ssis