NOLOCK提示的用途/目的是什么?

时间:2014-04-04 07:09:27

标签: sql sql-server sql-server-2008-r2

SELECT * FROM tablename (NOLOCK)

为什么我们使用NOLOCK选项,在sql server中如何值得这样做?是否在交易期间有效。

仅在select语句中或在update语句中使用NOLOCK选项。

2 个答案:

答案 0 :(得分:3)

NOLOCK仅用于SELECT。无论您可以设置任何设置,SQL Server都会将资源锁定在UPDATE / INSERT上。

NOLOCK指示引擎在读取之前不尝试在行上设置共享锁。这样,如果该行已被某些其他更新事务独占锁定,则不必等到释放独占锁定。

然而,它将读取未提交的数据,因此可能会从查询中获得错误的结果。

我建议不要使用它。如果存在阻塞问题,最好使用READ COMMITTED SNAPSHOT隔离。

答案 1 :(得分:1)

它仅与SELECT一起使用在不变的表上(数据仓库出现在我的脑海中)。如果表更新,如果在读取期间发生索引拆分,则可能会使行加倍。它非常适合只读大型数据仓库(在obviouis数据加载之外),因为100亿行选择查询的锁定会占用严重的资源 - 其他任何东西都是鲁莽的。