Sql server 处理表上更新的最佳方法
我正在寻找使用SSI更新表的更好方法。具体来说,我想优化表上的更新(大约有10个表使用相同的逻辑) 逻辑是,Sql server 处理表上更新的最佳方法,sql-server,ssis,Sql Server,Ssis,我正在寻找使用SSI更新表的更好方法。具体来说,我想优化表上的更新(大约有10个表使用相同的逻辑) 逻辑是, 从暂存中选择源数据,然后将其插入DW中的物理临时表(即TMP_Tbl) 从TMP_Tbl到MyTbl更新customerId列的所有数据匹配 将所有不存在的customerId列从TMP_Tbl1插入MyTbl 使用上述步骤,填充TMP_Tbl需要一些时间。因此,我计划将逻辑更改为删除insert,但根据以下内容: 这将是一个痛苦的处方 鉴于: 表上未使用索引/键 有些表包含5百万行,
- 表上未使用索引/键
- 有些表包含5百万行,有些表包含2千行
- 每次表更新需要2-3分钟,总共需要大约(15到20分钟)
- 这些更新我们在单独的序列容器中同时运行
任何人都知道什么是最好的使用方法,似乎使用物理临时表需要删除,这正常吗?对于SSI,您通常是
批量插入
,而不是插入
。因此,如果您不介意DELETE
,那么重新插入行通常应该比UPDATE
更好
考虑到这一点,更快的方法将是:
[执行SQL任务]
删除所有需要更新的记录。(根据您的数据库设计和查询,此处某些索引可能会有所帮助)[数据流任务]
快速加载(使用OLE DB目的地,数据访问模式:fiew表-快速加载)将更新记录和新记录从源文件加载到MyTbl。这里不需要临时表格删除
记录-您当前的方法也可以。
您只需要修复UPDATE
查询的性能(添加索引应该会有所帮助)。每次更新记录2-3分钟太长了。
如果更新数百万条记录需要2-3分钟,那么这是可以接受的
向表中添加正确的非聚集索引不应导致“更多的更新时间”。
这会有一点开销,但如果它能帮助您的
更新
查找而不是扫描一个大表,那么这通常是值得的。可以通过创建一些索引来提高性能。如果没有,15分钟听起来也不算太糟糕,因为你要面对数百万排的队伍。SSIS是用来做插入、更新的,所以你不应该真的考虑删除/插入,除非你有一个特别的理由这样做。如果我错了,请纠正我。我认为如果我在表中添加一个非聚集索引,更新将花费更多的时间。