NOLOCK
変更するテーブルを参照するクエリの部分には適用されません。 SQL Server の update ステートメントでは、テスト中に各行を短時間 U ロックします。これはデッドロック回避メカニズムです。これにより、各行を読み取り用に S ロックしてから X ロックしようとする複数の更新が防止されます。
私の知る限り、Uロックをなくすことはできません。ただし、自己結合によって、U ロックされた行の量を絶対最小値まで減らすことができます。
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
これによりオーバーヘッドが少し増えますが、 NOLOCK
を使用できます
読み取りにスナップショット分離を使用することを検討してください。 NOLOCK
クエリがランダムに中止されるなどの問題があります。