0

次の 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

プロファイラーでブロッキング レポートを 2 晩連続で実行しました。最初は 10 分間隔で、次に 5 分間隔で実行しました。ストアド プロシージャがブロックされていると表示されることはありません (ただし、他のクエリはブロックされます)。

これを最適化するためのアイデアはありますか? 結合ヘルプを使用してビューを作成しますか? (acct_nbr, appl_code, Other_Flag_50 from tableB) ありがとう!!

4

2 に答える 2

1

tableBに直接INNERJOINを実行してみましたか?

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
于 2012-06-04T16:17:09.590 に答える
0

rowlockテーブル全体がロックされないように使用してみてください。

update tableA with (rowlock)
...

編集 他のRDBMSについてはよくわかりませんが、私が提供した答えはSQLServerで機能します

于 2012-06-04T16:18:13.817 に答える