关于with(nolock)的问题

fstao 2012-01-18 04:22:56
比如下列语句:

select a.a1,a.a2,b.b3 from with(nolock) t1 as a
left join t2 as b on b.id1=a.id

这样写的目的是在于我要查t1的时候,不要锁住t1表,但是left join t2,是否需要加上with(nolock) 呢?
...全文
486 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2012-01-19
  • 打赏
  • 举报
回复
with(nolock)本身要写在表的后边的,
唐诗三百首 2012-01-19
  • 打赏
  • 举报
回复
建议都加with(nolock),

对于sql server而言,在高度并发情况下,可减少阻塞及死锁的可能性.

至于数据脏读,应该可以接受,毕竟事务rollback的几率是不大的.
houyajin 2012-01-19
  • 打赏
  • 举报
回复
加吧,数据量大的时候就容易死锁了。
houyajin 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wufeng4552 的回复:]

1:数据量特别大的表,牺牲数据安全性来提升性能是可以考虑的;
2:允许出现脏读现象的业务逻辑
3:数据不经常修改的表,这样会省于锁定表的时间来大大加快查询速度。
[/Quote]

学习!
昵称被占用了 2012-01-19
  • 打赏
  • 举报
回复
一个字:加
fstao 2012-01-19
  • 打赏
  • 举报
回复
比如说我这样写:

select i.*,ps.name from t_wh_billofdocument as i with (nolock)
left join t_bs_personnel as ps with (nolock) on i.bs_personnel_id=ps.id


或者这样写:

select i.*,ps.name from t_wh_billofdocument as i with (nolock)
left join t_bs_personnel as ps on i.bs_personnel_id=ps.id


一个left join加with (nolock),另一个是不加with (nolock),其实我希望是我select出来数据时,希望不要锁定表,而造成其它用户在select时被锁定,我不知道这两个语句,哪个比较好?
水族杰纶 2012-01-18
  • 打赏
  • 举报
回复
1:数据量特别大的表,牺牲数据安全性来提升性能是可以考虑的;
2:允许出现脏读现象的业务逻辑
3:数据不经常修改的表,这样会省于锁定表的时间来大大加快查询速度。

叶子 2012-01-18
  • 打赏
  • 举报
回复
个人认为一般情况下没有必要with(nolock)
水族杰纶 2012-01-18
  • 打赏
  • 举报
回复
你那种写法本身是错误的吧
位置不对
select a.a1,a.a2,b.b3 from t1 as a with(nolock)
left join t2 as b on b.id1=a.id

至于要不要nolock就要看你能否接受脏读
AcHerat 元老 2012-01-18
  • 打赏
  • 举报
回复
都去了吧~!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧