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

Sql NOLOCK提示的用途/目的是什么?,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,在中,从tablename(NOLOCK)中选择* 为什么我们要使用NOLOCK选项,这在sql server中有多大价值?它是否在交易期间工作 NOLOCK选项仅在select语句中使用或在update语句期间使用。NOLOCK仅用于SELECTs。SQL Server将在更新/插入时锁定资源,而不考虑您可能设置的任何设置 NOLOCK指示引擎在读取某行之前不要尝试设置共享锁。这样,如果该行已经被其他某个更新事务以独占方式锁定,则不必等到独占锁定被释放 但是,它将读取未提交的数据,因此有可能从

中,从tablename(NOLOCK)中选择*

为什么我们要使用NOLOCK选项,这在sql server中有多大价值?它是否在交易期间工作


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

NOLOCK仅用于SELECTs。SQL Server将在更新/插入时锁定资源,而不考虑您可能设置的任何设置

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

但是,它将读取未提交的数据,因此有可能从查询中得到错误的结果


我建议不要使用它。如果阻塞有问题,最好使用读提交快照隔离。

NOLOCK仅用于SELECTs。SQL Server将在更新/插入时锁定资源,而不考虑您可能设置的任何设置

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

但是,它将读取未提交的数据,因此有可能从查询中得到错误的结果


我建议不要使用它。如果阻塞有问题,最好使用读提交快照隔离。

它与SELECT only一起用于未更改的表(我想到的是数据仓库)。如果表更新,如果在读取期间发生索引拆分,它可能会得到双倍的行。对于只读的大型数据仓库(在Obvious数据负载之外)来说,它是非常好的,因为100亿行select查询上的锁占用了大量资源—其他任何操作都是鲁莽的。

它与select only一起用于不发生更改的表(我想到的是数据仓库)。如果表更新,如果在读取期间发生索引拆分,它可能会得到双倍的行。对于只读的大型数据仓库(在Obvious数据负载之外)来说,这是一个很好的选择,因为100亿行select查询上的锁占用了大量资源——其他任何东西都是鲁莽的。

谷歌坏了吗?诺洛克不接受任何锁。您是否应该这样做尚不清楚,但可能性不大。Check
nolock
用于解决SQL Server过时的锁定行为。现在,建议使用
readcommittedsnapshot
隔离级别来避免写入程序阻塞读卡器?诺洛克不接受任何锁。您是否应该这样做尚不清楚,但可能性不大。Check
nolock
用于解决SQL Server过时的锁定行为。现在,建议使用
读取提交的快照
隔离级别,以避免写入程序阻塞读取器。好的回答,我还想添加另一件事,即使用(NOLOCK)
查询提示与将
事务隔离级别设置为readunsimited
,唯一的区别是事务隔离级别将在该事务中的任何语句上具有NOLOCK,使用查询提示,我们可以将这种NOLOCK行为限制为事务中的一个或两个表。回答不错,我还想添加另一个查询提示,如
(NOLOCK)
等同于将
事务隔离级别设置为ReadUnomiited
,唯一的区别是事务隔离级别将对该事务中的任何语句具有NOLOCK,使用查询提示,我们可以将此NOLOCK行为限制为事务中的一个或两个表。