SQL Server with(nolock) 学习
1. with(nolock) 使用方法
问题:由于数据量过大,会产生数据锁死问题
解决方法:目的就是查询是不锁定表,从而达到提高查询速度的目的。
SELECT CONVERT ( VARCHAR ( 100 ), VW_BaoBiaoShuJu.LsTime, 23 ) AS DateNow, COUNT ( VW_BaoBiaoShuJu.ID ) AS TaskNums, SUM ( VW_BaoBiaoShuJu.MRealWeight ) AS TaskWeight FROM VW_BaoBiaoShuJu WITH (NOLOCK) WHERE VW_BaoBiaoShuJu.IsDelete = 0 AND VW_BaoBiaoShuJu.LsTime > '2023-01-01' AND VW_BaoBiaoShuJu.LsTime < '2023-12-27' GROUP BY CONVERT ( VARCHAR ( 100 ), VW_BaoBiaoShuJu.LsTime, 23 ) ORDER BY DateNow DESC
1、脏读
一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。
2、不可重复读
一个用户的一个操作是一个事务,这个事务分两次读取同一条记录,如果第一次读取后,有另外用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成两次读取的记录不同,如果事务中锁定这条记录就可以避免。
3、幻读
指用户读取一批记录的情况,用户两次查询同一条件的一批记录,第一次查询后,有其它用户对这批数据做了修改,方法可能是修改,删除,新增,第二次查询时,会发现第一次查询的记录条目有的不在第二次查询结果中,或者是第二次查询的条目不在第一次查询的内容中。
原文链接:
with(nolock)的用法
SQL Server 中WITH (NOLOCK)浅析