繁体   English   中英

处理表更新的最佳方法

[英]Best way to handle updates on a table

我正在寻找使用SSIS更新表的更好的方法。 具体来说,我想优化表的更新(大约10个表使用相同的逻辑)。

逻辑是

  1. 从暂存中选择源数据,然后将其插入DW中的物理临时表(即TMP_Tbl)
  2. 将所有由customerId列匹配的数据从TMP_Tbl更新为MyTbl。
  3. 将所有不存在的customerId列从TMP_Tbl1插入MyTbl。

使用上述步骤,这需要一些时间来填充TMP_Tbl。 因此,我计划将逻辑更改为delete-insert,但要注意以下几点在SQL中,UPDATE是否总是比DELETE + INSERT快? 这将是痛苦的秘方。

鉴于:

  • 表上未使用索引/键
  • 有些表包含500万行,有些表包含2k行
  • 每个表更新最多需要2-3分钟,总共大约需要15至20分钟
  • 这些更新我们在单独的序列容器中同时运行

任何人都知道最好的使用方法是什么,似乎需要删除使用物理临时表,这正常吗?

使用SSIS,您通常会BULK INSERT ,而不是INSERT 因此,如果您不介意DELETE ,则重新插入行的性能通常应优于UPDATE

考虑到这一点,更快的方法将是:

  1. [Execute SQL Task]删除所有需要更新的记录。 (根据您的数据库设计和查询,某些索引可能会有所帮助)。

  2. [Data Flow Task]快速加载(使用OLE DB目标,数据访问模式:数据表-快速加载),将更新的记录和新记录都从源导入MyTbl。 这里不需要临时表。

如果您不能/不想DELETE记录,那么您当前的方法也可以。 您只需要修复该UPDATE查询的性能即可(添加索引应该会有所帮助)。 每条更新的记录2-3分钟太长了。 但是,如果要花2-3分钟来更新数百万条记录,则可以接受。

向表中添加正确的非聚集索引不应导致“更新时间更多”。 会有一些开销,但是如果它可以帮助您的UPDATE而不是扫描大表,那么它通常是值得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM