背景:我想运行一个性能关键的查询,我不关心脏读。
我的问题是;如果我正在使用连接,我是否也必须在这些连接上指定 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)提示。