以下sp: 我有一个存储过程,运行时间从1/2分钟到4小时(在夜间处理过程中):
update tableA
set tableA.Other_Flag_50 = isnull(Staging.other_flag_50, 0)
from tableA
inner join (
select acct_nbr,
appl_code,
Other_Flag_50
from tableB
) Staging on tableA.lnhist_acct_nbr = Staging.acct_nbr
and tableA.lnhist_appl_code = Staging.appl_code
我连续两晚在Profiler中运行Blocking报告,首先是间隔10分钟,然后是5分钟。存储过程从不显示为被阻止(但它会阻止其他查询)。
有关优化此事的任何想法吗?是否可以使用加入帮助创建视图? (来自tableB的acct_nbr,appl_code,Other_Flag_50)谢谢!!
答案 0 :(得分:1)
您是否尝试过将INNER JOIN直接连接到tableB?
UPDATE tableA
SET tableA.Other_Flag_50=isnull(tableB.other_flag_50,0)
FROM tableA
INNER JOIN tableB
ON tableA.lnhist_acct_nbr = tableB.acct_nbr
AND tableA.lnhist_appl_code = tableB.appl_code
答案 1 :(得分:0)
尝试使用rowlock
来防止锁定整个表格。
update tableA with (rowlock)
...
修改强> 不确定其他RDBMS,但我提供的答案适用于SQL Server