背景:我有一个对性能至关重要的查询,我想运行它,并且我不在乎脏读。
我的问题是;如果我使用联接,是否也必须在这些联接上指定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)在联接上指定提示,以确保不锁定联接表?
(NOLOCK)
我不会讨论这个READ UNCOMMITTED论点,而只是您的原始问题。
READ UNCOMMITTED
是的,您需要WITH(NOLOCK)在联接的每个表上。不,您的查询不一样。
WITH(NOLOCK)
试试这个练习。开始事务,并将行插入到table1和table2中。暂时不要提交或回滚事务。此时,您的第一个查询将成功返回并包含未提交的行;您的第二个查询将不会返回,因为table2没有WITH(NOLOCK)提示。