我是 SSIS 的新手,想知道在数据工作流中执行插入时哪个会提供更好的性能。
使用其中一个有什么优势吗?
它们的名称相似,但用途却大不相同。目的地就是它听起来的样子——它是数据流的终点。您无法将任何内容连接到 OLE DB 目标的输出(超出错误流)。目的地能够执行基于集合的插入(这对于良好的性能非常重要)。它还可以执行单例插入(为流经数据流的每一行发出插入语句),这将导致到达目的地的吞吐量降低。
将该行为与 OLE DB 命令进行对比。这是一个转换组件,允许您对流经数据流的每一行执行任何操作。它是瑞士军刀 SQL “实干家”。您可以将其用作 INSERT 语句,但最常见的是我将其视为 UPDATE 目标。对于小型数据集,这很好。使用 OLE DB 命令转换的成本是成本。它将为流经数据集的每一行发出单例语句。这在事务日志、事务持有时间、计划缓存和许多其他我想不到的事情上都会付出高昂的代价。没有办法告诉 SQL Server 对这些操作进行批处理,因此您将不得不通过痛苦行 (RBAR) 来发出语句行。
如果您需要在 SSIS 中进行更新,您将通过将更新写入临时表并在数据流完成后执行基于集合的更新来获得更好的性能配置文件。Andy Leonard 在他的Stairway to Integration Services 系列中有很多讨论这种模式的文章。
参考
OLE 目标是插入的更好选择,因为它允许将数据批量加载到目标表中。
OLE DB 命令(我假设这就是您所说的 OLE 命令任务的意思)将逐行执行其操作,这要慢得多。但是,OLE DB 命令可以处理 OLE 目标无法处理的更新和删除