在永不更新的表上使用SELECT和(NOLOCK)是否安全?
答案 0 :(得分:1)
在一系列非常具体的情况下,Nolock是安全的。此外,安全不是全部或全无。您可能不关心某些安全属性。
如果表中的数据在物理上移动,Nolock扫描有时会失败。扫描也可以看到行两次或根本看不到行。如果您的DML不会导致行移动,则不应该发生这种情况。我说'#34;不应该"因为产品没有正式保证。例如,缩小文件或将其迁移为空也应该导致行移动。
更新可能会导致插入/删除对。插入和删除可能会导致行移动。
某些特定形式的DML在产品的当前实现中不会导致行移动,尽管我怀疑这也是正式保证的。例如,附加到正在扫描的b树的插入不会导致行移动,尽管可能会错过新插入的行(我认为)。
大多数情况下,当您使用NOLOCK时,您应该很少看到轻微损坏的数据,并且很少看到b树的扫描失败。如果那对你好,那就继续吧。