小编典典

SQL Server NOLOCK 和连接

all

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

我的问题是;如果我正在使用连接,我是否也必须在这些连接上指定 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)在连接上指定提示以确保我没有锁定连接表?


阅读 159

收藏
2022-08-16

共1个答案

小编典典

我不会解决这个READ UNCOMMITTED论点,只是你原来的问题。

是的,您需要WITH(NOLOCK)对每个表进行联接。不,您的查询不一样。

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

2022-08-16