小编典典

SQL Server NOLOCK并加入

sql

背景:我有一个对性能至关重要的查询,我想运行它,并且我不在乎脏读。

我的问题是;如果我使用联接,是否也必须在这些联接上指定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

收藏
2021-04-15

共1个答案

小编典典

我不会讨论这个READ UNCOMMITTED论点,而只是您的原始问题。

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

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

2021-04-15