谁能解释一下在查询中使用with (nolock)的含义,什么时候应该/不应该使用它?
例如,如果你有一个银行应用程序,有很高的事务率,在某些表中有很多数据,在什么类型的查询中nolock是可以的?在某些情况下,你是否应该总是使用它/永远不要使用它?
谁能解释一下在查询中使用with (nolock)的含义,什么时候应该/不应该使用它?
例如,如果你有一个银行应用程序,有很高的事务率,在某些表中有很多数据,在什么类型的查询中nolock是可以的?在某些情况下,你是否应该总是使用它/永远不要使用它?
当前回答
您可以在仅读取数据时使用它,并且并不真正关心是否可能返回尚未提交的数据。
它可以在读取操作上更快,但我不能确切地说快多少。
一般来说,我建议不要使用它——读取未提交的数据最多可能会有点混乱。
其他回答
您可以在仅读取数据时使用它,并且并不真正关心是否可能返回尚未提交的数据。
它可以在读取操作上更快,但我不能确切地说快多少。
一般来说,我建议不要使用它——读取未提交的数据最多可能会有点混乱。
WITH (NOLOCK)相当于使用READ uncommitted作为事务隔离级别。因此,您可能会读取一个未提交的行,该行随后会被回滚,即从未进入数据库的数据。因此,虽然它可以防止读取被其他操作死锁,但也存在风险。在具有高交易率的银行应用程序中,它可能不是您试图用它解决的任何问题的正确解决方案。
当你可以接受“脏”数据时使用nolock。这意味着nolock也可以读取正在修改的数据和/或未提交的数据。
在高事务处理环境中使用它通常不是一个好主意,这就是为什么它不是查询的默认选项。
我过去常常检索“下一批”要做的事情。在这种情况下,具体是哪个项目并不重要,我有很多用户运行相同的查询。
如果你正在处理金融交易,那么你永远不会想要使用nolock。Nolock最适合用于从具有大量更新的大型表中进行选择,并且您不关心所获得的记录是否可能过期。
对于财务记录(以及大多数应用程序中的几乎所有其他记录),nolock会造成严重破坏,因为您可能会从正在写入的记录中读取数据,而得不到正确的数据。