日期:2014-05-17  浏览次数:20735 次

加上with(nolock)任何时候的查询速度都比不加快吗?
加上with(nolock)任何时候的查询速度都比不加快吗?

但是我感觉不一定,我把所有的存储过程的查询都加with(nolock)后cpu反而100%,但是改一部分的话cpu视乎又能减少些,不确定到底是什么规律啊

请问,with(nolock)的使用到底要遵循什么样的规则,有什么办法可以直接测试加或不加两者间的效率差别

------解决方案--------------------
如果完全没有并发存在,那么with(nolock)其实没啥效果的,你要在并发环境才看到效果,至于CPU100%,有可能是其他影响的,所以这个要监控才行,不能马上下判断说是with(nolock)引起的
------解决方案--------------------
with(nolock)的主要作用是允许SELECT语句读取正在修改中的数据,也就是通常说的脏读(dirty read),对于数据修改数量很小而且对SELECT语句读出的数据精确性影响可以忽略的应用程序,可以使用这种方式来避免数据修改活动阻塞SELECT语句。
对于隔离级别来说,它允许SELECT语句读取数据而不需要请求(S)锁,既然不请求(S)锁,所以它既不会被(X)锁阻塞也不会阻塞(X)锁。
------解决方案--------------------
with (nolock)只是允许脏数据不锁表的一种查询并发机制,对性能缺少影响,CPU占用率高还是和SQL查询本身关系大。比如大表做分组聚合计算等。