设为首页 加入收藏

TOP

SQLServer中WITH(NOLOCK)知识点讲解
2018-03-21 08:33:56 】 浏览:165
Tags:SQLServer WITH NOLOCK 知识点 讲解

优点

有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。 可以用于inner join 语句

缺点

会产生脏读 只适用与select查询语句

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

详细内容:

要提升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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇50个SQL多表查询语句分享 下一篇统计各个部门对应员工涨幅的次数..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目