前几天,一位同事告诉我,如果不在cfquery中包含查询,那么在cftransaction中使用NOLOCK是毫无意义的。他声称SQL Server将只识别事务中的NOLOCK,因此不在cftransaction中进行查询会使NOLOCK变得冗余。
有人可以确认这是真的还是假的,因为在我工作过的所有CF商店中,NOLOCK都被大量使用,而且很少在cftransaction中使用。我是不是应该认为所有这些商店中的所有查询实际上都不尊重NOLOCK
发布于 2011-09-13 10:19:59
您的同事不正确,NOLOCK在context cftransaction之外不是多余的。
如果使用SQL Server中的默认设置,则执行的每个查询都包装在一个事务中,无论您是否已显式键入该查询。这被称为"autocommit mode“。
发布于 2011-09-13 10:39:11
您所需要做的就是查看SQL Server上的执行计划,看看它们是否遵守NOLOCK。我可以确认(通过多年的使用),NOLOCK确实是受人尊敬的。我不建议这样做(查看READ_COMMITTED_SNAPSHOT_ISOLATION),但无论有没有cftransaction,它都是非常荣幸的。
发布于 2011-09-13 10:04:56
Ben Nadel有一个很好的解释,还有几篇参考文章,比我更好地解释了NOLOCK的用法。但是,您不必在事务中使用NOLOCK来获得性能提升。
http://www.bennadel.com/blog/477-SQL-Server-NOLOCK-ROWLOCK-Directives-To-Improve-Performance.htm
希望这能有所帮助!约翰
https://stackoverflow.com/questions/7395903
复制相似问题