【发布时间】:2015-07-27 05:36:54
【问题描述】:
我有 2 个更新语句。当两者一起执行时,从 SSIS 需要超过 12 小时。在执行此更新语句之前,此表上的所有索引均已禁用。我需要提高性能。我需要建议:
1) 第一次更新声明
Update Db1.table1
Set Db1.table1.col1 = Db2.table2.col1
from Db1.table1, Db2.table2
where Db1.table1.col2 = Db2.table2.col2
2) 第二次更新声明
update table1
set table1.col3 = 0
from table1
where table1.col3 is null
批量更新可以帮助提高第一次更新语句的性能吗? 我看到在 col3 上有一个默认值就足够了,而不是运行第二次更新。但我不确定它是否会影响插入查询。该表有很多数据。我不确定是否要更改表格以在表格包含大量数据的列上包含默认值。
请提供您对上述语句的性能调整的建议。另请注意,我对数据库没有适当的权限来验证执行计划。
【问题讨论】:
-
为什么要删除索引? Db1.table1.col2 和 Db2.table2.col2 至少应该被索引。这将加快更新表所需的连接。最后,如果您无权分析您的查询,您应该将工作交给有权完成这项工作的人。
-
在将数据插入表之前禁用索引以获得更好的性能。在插入和更新语句之后,我们启用索引。但是,目前这两个表中的这些列上既没有聚集索引,也没有非聚集索引。
标签: sql sql-server performance sql-server-2008 ssis