如果同一个表在一个查询中多次存在,我们是否必须每次添加WITH (NOLOCK)
?假设我们有一个巨大的查询,其中同一个表可能被多次引用,那么我们是否每次都必须添加WITH (NOLOCK)
,或者我们可以添加一次,SQL将确保使用WITH (NOLOCK)
提示读取它的每个实例。
我在上面的评论中发布了几个文章链接,以帮助说明使用NOLOCK
应该谨慎。但话虽如此,如果你已经做了研究并了解了自己的发展方向,那么有一种更简单的方法可以实现
特别是当使用具有许多表引用的查询时,只需设置会话的事务隔离级别,而不是对所有表引用都使用WITH(NOLOCK)
提示。在查询上方包含一行:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
这在功能上与向查询中的每个表添加提示相同,您可以确保没有遗漏任何表。
另一方面,如果你,你和你的最终用户可能会更快乐
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
你的独立研究会告诉你为什么这是真的。