【问题标题】:TSQL vs SSIS LookupTSQL 与 SSIS 查找
【发布时间】:2014-12-25 15:26:57
【问题描述】:

我试图为 SSIS 查找组件找到一些性能良好的 Tsql 等效项。特别是对于事实表加载。

在几种不同的查询模式之后,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 行)上选择 TSQL 而不是 SSIS 会有什么影响 目前我在一个 200GB RAM 的服务器上进行了测试,所以将所有内容都放入内存中没有问题。

但是我想如果在内存较少的机器上使用此查询,它将开始溢出到磁盘并严重损害性能。 SSIS 会在内存方面更有效率。我对这个假设是否正确?

我想到的另一个想法是使用游标循环仅使用 tsql 执行此操作,例如在加载所有数据之前为 1M 行。通过这样做,您将有更少的机会获得内存并开始浪费到磁盘。这是一种可行的方法吗?还是看看你有什么其他方法?

PS:我完全知道 SSIS 是加载事实表的方法。但是让我们假设我们只需要 TSQL。

【问题讨论】:

    标签: sql sql-server tsql ssis


    【解决方案1】:

    不要对如此大量的数据使用游标。您的系统将响应缓慢,最好使用 ssis

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2010-11-08
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多