WITH (NOLOCK)

转载 2013年12月05日 08:13:47

WITH (NOLOCK)

缺点:

  1.会产生脏读

  2.只适用与select查询语句

优点:

  1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。

  2.可以用于inner join 语句

脏读: 一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。

详细内容:

  要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑。其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。

不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read(脏读)。

例如:

SELECT COUNT(UserID) 
FROM EMPLOYEE WITH (NOLOCK) 
JOIN WORKING_GROUP WITH (NOLOCK) 
ON EMPLOYEE.UserID = WORKING_GROUP.UserID

除了简单的SELECT之外,有JOIN的SELECT语法也是可以使用的。但是DELETE、INSERT、UPDATE这些需要transaction的指令就不行了…


有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
加了WITH (NOLOCK)即告诉SQL Server,我们的这段SELECT指令无需去考虑目前table的transaction lock状态,因此效能上会有明显的提升,而且数据库系统的Lock现象会有明显的减少(包含Dead Lock)。

有 一点要特别注意,因为WITH (NOLOCK)不考虑目前table的transaction lock,因此当有某些资料正处于多个phase交易(例如跨多个table的transaction交易-->如提款系统),WITH (NOLOCK)会让目前处理交易process的数据被忽略…

讲白话一点,也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下。

如果不需考虑transaction,WITH (NOLOCK)或许是个好用的参考。

注1:WITH ( < table_hint > )
指定由查询优化器使用的表扫描、一或多个索引,
或由查询优化器利用此数据表以及为此语句使用锁定模式。

注2:WITH (NOLOCK)相当于READ UNCOMMITTED

Sql Server中的NOLOCK作用

先说下其区别,之后再做测试。     大家都知道,每新建一个查询,都相当于创建一个会话,在不同的查询分析器里面进行的操作,可以影响到其他会话的查询,极端的情况可能会一直处于阻塞中,哪怕只是一个很...
  • xingxing1828
  • xingxing1828
  • 2014年06月26日 16:44
  • 1482

关于sql中的with(nolock)

SQL Server 中的 NOLOCK 到底是什么意思 一般用于此类语句中:select * from t with(NOLOCK) nolock是不加锁查询,可以读取被事务锁定的数据,也称...
  • liujiayu2
  • liujiayu2
  • 2015年08月01日 12:22
  • 937

视图后面加with(nolock)后

原文出处:http://www.cnblogs.com/ASPNET2008/archive/2012/02/09/2343538.html       一些小的企业项目,往往存在很多局限性...
  • chelen_jak
  • chelen_jak
  • 2013年01月25日 10:33
  • 1795

nfs -o nolock

前两天测试过程中,测试机始终mount不上我们的nfs。 比如我使用命令:mount vt-nfs:/share  /mnt/share 开始是mount命令一直hang在那里(卡住了);另一种情...
  • bruno231
  • bruno231
  • 2012年07月25日 02:55
  • 2328

with(nolock) 与 with(readpast) 与不加此2个的区别

查询窗口一:  BEGIN TRANSACTION update tblmembers setdepartmentname='电脑部' where staffid ='21226' 没有结束的...
  • F2164529
  • F2164529
  • 2012年01月18日 14:27
  • 2886

目标板挂载NFS时 需要nolock参数的网摘

nfs方式共享主机文件 作者:qtopia2009-7-3 10:00:00一.   检查nfs状态:#service nfs status二.   在主机创建nfs共享文件夹:#mkdir /nfs...
  • xiaoyufu007
  • xiaoyufu007
  • 2010年03月09日 00:18
  • 10428

SQL with(nolock)与with(readpast)

所有Select加 With (NoLock)解决阻塞死锁,在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPA...
  • snzy521
  • snzy521
  • 2014年02月24日 13:46
  • 537

SQL with (nolock)

大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的。 什么是并发访问:同一时间有多个用户访问同一资源,并发...
  • miaoxw01131
  • miaoxw01131
  • 2010年11月11日 11:26
  • 1493

sql查询,nolock写还是不写,这是一个问题

在做过的很多项目中,发现大家不管对什么表,逢select必定加上nolock(或者with(nolock)),好像已经是制度化的一种东西。有领导高人解释说加上nolock可以提高查询速度,不影响对数据...
  • ulark
  • ulark
  • 2010年03月09日 18:03
  • 751

SELECT时的with(nolock)选项说明

要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑。其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询...
  • zhaozidong86
  • zhaozidong86
  • 2012年08月21日 11:25
  • 3088
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WITH (NOLOCK)
举报原因:
原因补充:

(最多只允许输入30个字)