我的应用程序中的一个报告运行一个需要 5 到 15 秒的查询(限制为将返回的行数)。 该查询有 8 个连接到我的应用程序的几乎所有主表(客户、销售、单位等)。
一个小工具告诉我,此时,所有这 8 个表都被共享表锁锁定。也就是说,此时不会进行任何更新操作。
一位 friend 的解决方案是,让查询中的每个连接都具有 NoLock,这不是必须具有 100% 正确数据(脏读),因此这 8 个表中只有 1 个将被完全锁定。 这是一个好的解决方案吗?对于 99% 的数据来自一个表的报告,解锁优先级较低的表?
最佳答案
尝试查看 READ COMMITTED SNAPSHOT 而不是 NOLOCK。这意味着数据可能是“旧的”但永远不会变脏。
关于长查询中的 SQL Server 表锁 - 解决方案 : NoLock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098541/