长跑

时间:2012-06-04 16:06:11

标签: sql optimization

以下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)谢谢!!

2 个答案:

答案 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