ROWLOCK on Delete的目的是什么?何时使用?
技术问答
170 人阅读
|
0 人回复
|
2023-09-14
|
前任)9 T5 M0 K' E* M# [$ O2 c2 d
我什么时候应该使用以下语句:
, r4 w2 v0 _2 [0 W, |1 X' t; p V% UDELETE TOP (@count)
- ^) s- r+ `- a, g3 q2 QFROM ProductInfo WITH (ROWLOCK)$ c6 B; L- b Q7 _' O
WHERE ProductId = @productId_for_del;* l' N3 b% O5 R F# }
何时应该做:
$ w, C! Z e8 Q/ Q) d0 vDELETE TOP (@count)5 a; {& R3 h0 @2 m( I* a. P# M |/ D
FROM ProductInfo& j& V/ O! L$ f
WHERE ProductId = @productId_for_del;
4 Q9 Y6 B, t* ^$ j9 _' Y
$ l5 ?+ `4 [, m0 a; q( R2 n2 [解决方案:! w% y* E9 N9 U1 F% C. n
7 `- i6 ?. F* B5 y$ t% e9 H1 M" n: {, ]0 b3 F; h- U3 e; c0 B/ K1 H
) N) D0 Y5 E3 ]$ [0 z) n# c
的with (rowlock)是,指示数据库,它应该保持锁在一排范围的提示。这意味着数据库将避免将锁升级到块或表范围。
" ~8 |4 M1 Y, {8 o$ X当查询仅影响一行或只有几行时,可以使用提示来防止锁锁定不会被查询删除的行。这样一来,另一个查询就可以同时读取不相关的行,而不必等待删除完成。. a) K, ~7 f0 J1 B; @( [
如果在查询中使用它将删除很多行,则它可能会降低性能,因为数据库将尝试避免将锁升级到更大的范围,即使这样做会更有效。 k% ~: o0 D1 C- ^
通常,您不需要在查询中添加此类提示,因为数据库知道要使用哪种锁。仅在由于数据库决策错误而导致性能出现问题的情况下,才应将此类提示添加到查询中。 |
|
|
|
|
|