我正在寻找使用SSIS更新表的更好方法。具体来说,我想优化表上的更新(大约10个表使用相同的逻辑)。
逻辑是,
使用上述步骤,这需要一些时间来填充TMP_Tbl。因此,我计划将逻辑更改为delete-insert但是根据这个: In SQL, is UPDATE always faster than DELETE+INSERT?这将是痛苦的一个方法。
假设:
任何人都知道什么是最好的使用方式,似乎需要删除物理临时表,这是正常的吗?
答案 0 :(得分:0)
使用SSIS,您通常BULK INSERT
,而不是INSERT
。因此,如果您不介意DELETE
- 重新插入行应该总体上优于UPDATE
。
考虑到这一点,更快的方法是:
[Execute SQL Task]
删除您需要更新的所有记录。 (根据您的数据库设计和查询,某些索引可能会有帮助)。
[Data Flow Task]
快速加载(使用OLE DB目标,数据访问模式:fiew表 - 快速加载)更新和从源到MyTbl的新记录。这里不需要临时表。
如果您不想/不想DELETE
条记录 - 您当前的方法也可以。
您只需要修复UPDATE
查询的性能(添加索引应该有帮助)。每更新一次记录2-3分钟太长了。
如果更新数百万条记录的时间是2-3分钟 - 那么它是可以接受的。
将正确的非聚集索引添加到表中不应该导致更新时间更多"。
会有轻微的开销,但如果它有助于你UPDATE
寻找而不是扫描大桌子 - 通常是值得的。