2

メインのトランザクションテーブルとしましょう

主要 :

mainID Name  Active
1  sharath  1
2  kiran    0
3  ashish   1

取引 :

TransID TransType status MainID IsActive
101      D         22    1       0
102      R         27    2       1
103      R         32    2       1
104      D         11    1       0
105      R         43    3       0

これらの中でどの update ステートメントが望ましいか:

1)

Update TR
set  status  = 0,
     Isactive = 0
from Transaction TR
inner join main MN with(nolock) on MN.MainID = TR.MainID 
where MN.Isactive = 0

2)

Update TR
set  status  = 0,
     Isactive = 0
from Transaction TR
inner join main MN on MN.MainID = TR.MainID 
where MN.Isactive = 0

最初のクエリでは、Main との内部結合を作成しwith(nolock)、Isactive = 0 の MainID のレコードを更新するために使用しました。

2 番目のクエリでは、使用せずwith(nolock)に update ステートメントを記述しました。

どちらが好ましいか、n は今後もエラーなしで更新を行います。

4

1 に答える 1

1

SELECT で NOLOCK を使用すると、ダーティである可能性があるデータが返されます。このテーブル ヒントを使用すると、ダーティ データに問題がないことがわかっている場合に、結果をすばやく取得できます。しかし、DML で NOLOCK を使用する必要がある理由はわかりません。ダーティ データが db に書き込まれ、コミットされる可能性があるからです。メイン テーブルのコミットされていないトランザクションは、ダーティ データをトランザクション テーブルに導入する可能性があります。

于 2013-02-26T09:12:56.993 に答える