如果您未在NOLOCK
中包含查询,那么前一天同事告诉我,在cfquery
中使用cftransaction
毫无意义。他声称SQL Server只会在事务中识别NOLOCK
,因此在cftransaction
内没有查询会使NOLOCK
变得多余。
有人确认这是否属实,因为在我工作过的所有CF商店中,NOLOCK
被慷慨地使用,并且很少在cftransaction
内。我是否应该认为所有这些商店中的所有查询实际上并不尊重NOLOCK
?
答案 0 :(得分:4)
您需要做的就是查看SQL Server上的执行计划,看看他们是否尊重NOLOCK。我可以确认(从多年的使用情况)NOLOCK确实很荣幸。我不建议它(检查READ_COMMITTED_SNAPSHOT_ISOLATION),但无论是否有cftransaction
,它都是值得尊敬的。
答案 1 :(得分:3)
您的同事不正确,NOLOCK
在上下文cftransaction
之外并不多余。
如果您在SQL Server中使用默认设置,则无论是否已明确键入,您执行的每个查询都将包含在事务中。这称为“autocommit mode”。
答案 2 :(得分:0)
Ben Nadel有一个很好的解释以及一些参考文章,它们解释了NOLOCK的使用,然后我可以做得更好。但是,您不必在事务中使用NOLOCK来获得性能提升。
http://www.bennadel.com/blog/477-SQL-Server-NOLOCK-ROWLOCK-Directives-To-Improve-Performance.htm
希望这有帮助! 约翰