SQL Server NOLOCK和连接

背景:我有一个性能关键的查询我想运行,我不在乎脏读。

我的问题是;如果我使用连接,我必须指定这些NOLOCK提示吗?

例如;是:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b WITH (NOLOCK) ON a.ID = b.ID

相当于:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b ON a.ID = b.ID

或者我需要在连接上指定(NOLOCK)提示,以确保我没有锁定连接的表?

最佳答案
我不会解决READ UNCOMMITTED参数,只是你原来的问题。

是的,您需要在连接的每个表上使用WITH(NOLOCK)。不,你的查询是不一样的。

尝试这个练习。开始事务并将一行插入table1和table2。不要提交或回滚事务。此时,您的第一个查询将成功返回并包含未提交的行;您的第二个查询将不会返回,因为table2没有WITH(NOLOCK)提示。

转载注明原文:SQL Server NOLOCK和连接 - 代码日志