京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:丶平凡世界
来源: 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);
--这样会提示用错误 select * from [IP].[dbname].dbo.tableName (nolock) --这样就可以 select * from [IP].[dbname].dbo.tableName with(nolock)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
平均数是数据分析、数理统计与日常运算中最基础、最常用的统计量,核心作用是浓缩一组数据的整体水平、刻画数据集中趋势。在众多 ...
2026-08-24在MySQL数据库中,InnoDB存储引擎作为主流事务型引擎,默认事务隔离级别为可重复读(Repeatable Read,RR),这与SQL Server、Or ...
2026-08-24 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-08-24 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-08-21在数据分析与数据可视化工作中,直方图是展示数据分布特征、离散程度、集中区间的核心图表,能够直观呈现数值数据的频次分布规律 ...
2026-08-20在数据分析领域有一句核心准则:垃圾数据进,垃圾数据出。数据清洗是数据分析、数据建模、数据可视化之前的必经前置工序,也是保 ...
2026-08-20 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-08-20在Python数据分析与数据清洗工作中,Pandas是最核心的数据处理库,DataFrame是结构化数据的标准存储格式。在实时数据采集、循环 ...
2026-08-19在零售行业大数据分析与精细化运营领域,纸尿裤旁摆放啤酒是最经典、最具代表性的商业案例。两种看似毫无关联的商品,一个是婴幼 ...
2026-08-19 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-08-19在数据分析、业务监控、质量检测与风险管控工作中,数据波动性是衡量数据稳定性、业务健康度、结果可信度的核心依据。数据波动代 ...
2026-08-18很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当导致 ...
2026-08-18在数据分析、业务评价、产品评级、用户分层与综合决策场景中,单一指标往往无法全面、客观地评价事物整体水平。现实中的评价对象 ...
2026-08-18在数理统计、假设检验、数据分析与机器学习领域中,卡方分布(χ²分布)是继正态分布、t分布之后最重要的连续型概率分布之一。 ...
2026-08-17在Python数据清洗、文本校验、账号密码规则校验、脏数据过滤、字符串规整化处理中,正则表达式是最高效、最常用的文本匹配工具。 ...
2026-08-17 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-08-17手游行业具备用户迭代快、竞争激烈、用户粘性易流失的典型特征。随着新游持续上线、玩家审美升级、玩法疲劳等问题出现,存量用户 ...
2026-08-14在数字化产品运营、商业数据分析、业务增长管理中,零散的指标统计无法支撑系统性的业务决策。单一的点击率、转化率、销量数据只 ...
2026-08-14 很多数据分析师每天都在写SQL,但当被问到“数据查询语言(DQL)的本质是什么”“SELECT语句中各子句的书写顺序与实际执行顺 ...
2026-08-14在数据库数据分析、数据清洗、报表统计与业务查询场景中,日期时间是最高频、最核心的基础字段。数据库中存储的日期格式多样,包 ...
2026-08-13