WITH(NOLOCK) 还能相信吗?

socg 2015-05-17 02:13:09
SELECT TOP 1 FirstTime FROM History 返回结果 2013-11-06 11:46:05.267
SELECT TOP 1 FirstTime FROM History NOLOCK 返回结果 2013-11-06 11:46:05.267
SELECT TOP 1 FirstTime FROM History WITH(NOLOCK) 返回结果 2014-08-19 09:56:14.250


Win7 32位系统 ,数据库 SQL 2008 R2
History 每天有很多数据生成 有2千多万行了,聚集索引是 FirstTime


...全文
455 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamwho123 2015-06-01
  • 打赏
  • 举报
回复
with (nolock) 不加锁 但会脏读
rfq 2015-06-01
  • 打赏
  • 举报
回复
去数据过的过程可能是 并行的 所以 不确定
rfq 2015-06-01
  • 打赏
  • 举报
回复
选数据 ,这个 是随机 的
gw6328 2015-05-30
  • 打赏
  • 举报
回复
为什么要加个nolock?这个数据是不准确的,如果事务有回滚则不对。
socg 2015-05-29
  • 打赏
  • 举报
回复
我是拷贝的现场数据库到本机,只有我一个人读取,不存在脏肚的情况。 with nolock 和nolock肯定是不相同的,上面的结果每次执行都是得到的相同的结果。 加了排序的确没问题,但不加排序时 with nolock 为什么会改变结果呢?
hery2002 2015-05-29
  • 打赏
  • 举报
回复
qzyf1992 2015-05-29
  • 打赏
  • 举报
回复
看你的需求喽,如果客户端允许脏读 用with(nolock)是可以提高很多性能的
haitao 2015-05-19
  • 打赏
  • 举报
回复
没order by,top的结果自然是不确定(ms不保证)的 与nolock无关
  • 打赏
  • 举报
回复
with(nolock) 是脏读,和 set transaction isolation level read uncommitted 一样的。 既然是脏读去,随机返回一条数据,肯定就是从内存中返回一条数据,而内存中有好多数据是刚insert进去,还没有提交,写回到磁盘上,所以这些数据也可能直接返回了。
fengxiaohan211 2015-05-18
  • 打赏
  • 举报
回复
你没有排序 top 1是随机的
Tiger_Zhao 2015-05-18
  • 打赏
  • 举报
回复
不加 ORDER BY 的 SELECT TOP 怎么能信!
图样图森破,少年。
俺是大菠萝 2015-05-18
  • 打赏
  • 举报
回复
按照你的语句,用法上with nolock 和nolock是同等的; 如果只select top1而没有排序,则无法得到一个准确的值,这个和sqlserver的预读机制有关,使用nolock时,无法按照某一特定顺序取top N,即便这个表有聚集索引也不行,如需要排序,需要明确指明order by的列
卖水果的net 版主 2015-05-18
  • 打赏
  • 举报
回复
使用 with(nolock) ,是自己对自己的信任,不是人对机器的信任。 你自己确信使用 with (lock) 不会影响你当前的查询结果时,再使用。
薛定谔的DBA 2015-05-17
  • 打赏
  • 举报
回复
那就是在执行SELECT TOP 1 FirstTime FROM History WITH(NOLOCK) 之前,有人更改或者插入了时间为“2014-08-19 09:56:14.250”的行,top 是按照聚集索引的顺序排序的,楼主的聚集索引是 FirstTime ,返回的时间是最大的,聚集索引是降序的。 时间不对看看有没有数据更改或者迁移。或者连续这样执行检查,是不是数据变化了 SELECT TOP 1 FirstTime FROM History SELECT TOP 1 FirstTime FROM History WITH(NOLOCK) SELECT TOP 1 FirstTime FROM History
专注or全面 2015-05-17
  • 打赏
  • 举报
回复
WITH(NOLOCK) 是允许脏读,意思就是允许读到其他事物对当前数据修改后尚未提交的结果 正常情况下(read commit),其他事物对当前数据修改后,尚未提交之前,其他进程是无法读取到的
leeya66 2015-05-17
  • 打赏
  • 举报
回复
应该要有排序吧,不然怎么知道对与错

34,576

社区成员

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

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