NOLOCK 导致分配顺序扫描而不是索引顺序扫描。
NOLOCK 不会阻止写入,因为它不在表上获取共享锁。
在NOLOCK扫描期间,由于没有共享锁,并且在扫描当前到达的点之前发生了写入(插入/更新),那么这种情况将导致记录丢失。
类似地,在写入(插入/更新)期间,当读取一行后发生页拆分,并且该行现在是下一页的一部分(由于页拆分),那么这种情况将导致重复记录。
我一直在阅读文章,这些文章似乎表明丢失/重复行问题是由于分配顺序扫描造成的。
如上面的示例所示,丢失/重复记录问题是由于没有锁定和页面拆分造成的。正确的?是否也是分配顺序扫描导致的?
如果分配有序扫描确实会导致丢失行/重复项,那么我想问 - 假设引擎使用了索引顺序扫描(我知道引擎不会这样做,但只是为了这个问题而假设)而不是分配顺序扫描,那么它将如何解决丢失/重复行问题?