[英]Best way to handle updates on a table
我正在寻找使用SSIS更新表的更好的方法。 具体来说,我想优化表的更新(大约10个表使用相同的逻辑)。
逻辑是
使用上述步骤,这需要一些时间来填充TMP_Tbl。 因此,我计划将逻辑更改为delete-insert,但要注意以下几点 : 在SQL中,UPDATE是否总是比DELETE + INSERT快? 这将是痛苦的秘方。
鉴于:
任何人都知道最好的使用方法是什么,似乎需要删除使用物理临时表,这正常吗?
使用SSIS,您通常会BULK INSERT
,而不是INSERT
。 因此,如果您不介意DELETE
,则重新插入行的性能通常应优于UPDATE
。
考虑到这一点,更快的方法将是:
[Execute SQL Task]
删除所有需要更新的记录。 (根据您的数据库设计和查询,某些索引可能会有所帮助)。
[Data Flow Task]
快速加载(使用OLE DB目标,数据访问模式:数据表-快速加载),将更新的记录和新记录都从源导入MyTbl。 这里不需要临时表。
如果您不能/不想DELETE
记录,那么您当前的方法也可以。 您只需要修复该UPDATE
查询的性能即可(添加索引应该会有所帮助)。 每条更新的记录2-3分钟太长了。 但是,如果要花2-3分钟来更新数百万条记录,则可以接受。
向表中添加正确的非聚集索引不应导致“更新时间更多”。 会有一些开销,但是如果它可以帮助您的UPDATE
而不是扫描大表,那么它通常是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.