SQL 中为什么经常要加 Nolock ?

  发布时间:2025-11-04 04:08:23   作者:玩站小弟   我要评论
刚开始工作的时候,经常听同事说在SQL代码的表后面加上WITH(NOLOCK)会好一些,后来仔细研究测试了一下,终于知道为什么了。那么加与不加到底有什么区别呢?SQL在每次新建一个查询,就相当于创建了 。

刚开始工作的经常加时候,经常听同事说在SQL代码的经常加表后面加上WITH(NOLOCK)会好一些,后来仔细研究测试了一下,经常加终于知道为什么了。经常加

那么加与不加到底有什么区别呢?经常加

SQL在每次新建一个查询,就相当于创建了一个会话。经常加在不同的经常加查询窗口操作,会影响到其他会话的经常加查询。当某张表正在写数据时,经常加这时候去查询很可能就会一直处于阻塞状态,经常加哪怕你只是经常加一个很简单的SELECT也会一直等待。

我们这里使用事务来往某张表里写数据,经常加我们知道事务在写完表必须提交(COMMIT)或回滚(ROLLBACK)才能释放表,经常加否则会一直处于阻塞状态。经常加

在插入过程中,经常加我们写一个简单的查询语句,在不添加WITH(NOLOCK)和添加WITH(NOLOCK)的情况下,看会发生什么。

示例数据如下表A,是我们新建的一个非常简单的表。

下面我们创建一个往里面写数据的事务(使用BEGIN TRAN就可以开始一个事务了)。

我们发现有1行受影响了,源码库注意这里的会话ID是59(左上角黄色标签上的数字)。

不添加NOLOCK

我们新建一个查询窗口,然后查询A表:

从上面的查询可以看到,表A被锁住了,我们的查询一直处于阻塞状态。这里的会话ID是60。

这个时候如果你在会话59的窗口执行COMMIT或ROLLBACK,会话60的查询结果会立刻显示出来,这里为了下面的演示我们暂时不提交或回滚。

添加NOLOCK

我们再新建一个查询窗口,还是查询A表,这次我们加上NOLOCK。

注意上图标红色的地方,当前会话ID是55,旁边的60还在执行状态,而我们加了NOLOCK后,瞬间就查询出结果了,而且还把事务里即将要插入的数据给查询到了。免费源码下载这是为什么呢?

事务里的数据虽然还没有提交,但是它实际上已经存在内存里面了,这个时候我们使用NOLOCK查询到的结果,实际上还没存储到硬盘。

从上面的两个测试可以看出,NOLOCK的作用其实就是为了防止查询时被阻塞,只是这样会产生脏读(未提交的数据)。

那么一般什么情况下使用NOLOCK呢?

通常是一些被频繁写的表,不管是插入,更新还是删除。这样的表在查询时,使用NOLOCK是非常有效的。

WITH(NOLOCK)和NOLOCK的区别

不知道小伙伴注意没,我前面介绍时是写的WITH(NOLOCK),服务器托管但是测试时,使用的是(NOLOCK),它们有什么区别呢?为了搞清楚WITH(NOLOCK)与NOLOCK的区别,我们先看看下面三个SQL语句有啥区别:

SELECT * FROM A NOLOCK

SELECT * FROM A (NOLOCK);

SELECT * FROM A WITH(NOLOCK);

(NOLOCK)这样的写法,NOLOCK其实只是别名的作用,而没有任何实质作用。所以不要粗心将(NOLOCK)写成NOLOCK。

(NOLOCK)与WITH(NOLOCK)其实功能上是一样的。(NOLOCK)只是WITH(NOLOCK)的别名,但是在SQL Server 2008及以后版本中,(NOLOCK)不推荐使用了,"不借助 WITH 关键字指定表提示”的写法已经过时了。

在使用链接服务器的SQL当中,(NOLOCK)不会生效,WITH(NOLOCK)才会生效。

--这样会提示用错误

select * from [IP].[dbname].dbo.tableName with (nolock)

--这样就可以

select * from [dbname].dbo.tableName with(nolock)
  • Tag:

相关文章

  • 深入了解u深度制作教程(从入门到精通,助你成为AI大师)

    摘要:近年来,人工智能AI)技术迅速发展,成为科技领域的热门话题。而u深度制作作为一种重要的AI技术,被广泛运用于图像处理、自然语言处理等领域。本文将带您深入了解u深度制作教程,从入门...
    2025-11-04
  • Eureka 都挂了,微服务还能调通吗?

    这是一位公众号读者遇到的面试题。老实说,这个问题并不难。如果你做过微服务开发,这个面试题应该能够立马答出来,如果你没做过微服务开发,但是学过一些 Spring Cloud 组件的用法,这个问题可能要稍
    2025-11-04
  • 软件工程师的试炼之地:53道Python面试问答

    本文转载自公众号“读芯术”(ID:AI_Discovery)不久前我才通过面试,入职成为了“数据科学家”,但我实际上做的却是“Python工程师”的工作。如果能提前复习Python线程生命周期的知识,
    2025-11-04
  • “5G+VR”消费新模式 中国市场规模有望达900亿元

    戴上VR(虚拟现实)设备走遍大好河山、登陆VR商店选购最新产品……随着5G与VR在多个领域“成功牵手”,虚拟现实产业在加速普及和商用落地方面迎来发展新机遇。工信部日前印发《关于推动5G加快发展的通知》
    2025-11-04
  • 免费转换PDF为Word的最佳方法(绝对免费的PDF转Word工具推荐)

    摘要:在日常办公和学习中,我们经常会遇到需要将PDF文件转换成Word文档的情况。然而,许多在线工具或软件都要求用户付费或订阅会员才能享受转换服务,这对于需要频繁转换文件的用户来说可能是...
    2025-11-04
  • 2020年非常强大的远程调试工具

    本文介绍了一些常见的优秀调试工具及其亮点。代码调试时,工具很重要,因为某种程度上,它能决定我们是否可以快速修复代码中的问题。以前,调试颇具挑战。由于缺乏可靠的调试器,开发人员不得不使用一些特殊技巧。例
    2025-11-04

最新评论