在性能方面,您始终专注于选择。
Shared 不会阻止读取。
共享锁块更新。
如果您有数百个共享锁,则更新需要一段时间才能获得独占锁,因为它必须等待共享锁清除。
默认情况下,选择(读取)采用共享锁。
共享 (S) 锁允许并发事务读取 (SELECT) 资源。
共享锁对其他选择(1 或 1000)没有影响。
区别在于 nolock 与 shared lock 效果如何更新或插入操作。
当资源上存在共享 (S) 锁时,没有其他事务可以修改数据。
共享锁会阻止更新!
但是 nolock 不会阻止更新。
这会对更新的性能产生巨大影响。它也会影响刀片。
脏读(nolock)听起来很脏。你永远不会得到部分数据。如果更新将 John 更改为 Sally,您将永远无法获得 Jolly。
我经常使用共享锁来实现并发性。数据一读就过时了。下一毫秒更改为 Sally 的 John 的读取是陈旧数据。在下一毫秒回滚 John 的 Sally 读取是陈旧数据。那是在毫秒级别。如果用户使用共享锁,我有一个数据加载器需要 20 小时才能运行,而如果用户没有使用锁,则需要 4 小时才能运行。在这种情况下,共享锁会导致数据过期 16 小时。
不要错误地使用 nolocks。但他们确实有一席之地。如果您要在一个字节设置为 1 时取消检查,然后在检查被取消时将其设置为 2 - 不是不锁定的时间。