SQL Server with(nolock) 学习

发布时间 2023-12-28 18:26:20作者: lglmvp

 

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)浅析