长查询中的 SQL Server 表锁 - 解决方案 : NoLock?

标签 sql sql-server

我的应用程序中的一个报告运行一个需要 5 到 15 秒的查询(限制为将返回的行数)。 该查询有 8 个连接到我的应用程序的几乎所有主表(客户、销售、单位等)。

一个小工具告诉我,此时,所有这 8 个表都被共享表锁锁定。也就是说,此时不会进行任何更新操作。

一位 friend 的解决方案是,让查询中的每个连接都具有 NoLock,这不是必须具有 100% 正确数据(脏读),因此这 8 个表中只有 1 个将被完全锁定。 这是一个好的解决方案吗?对于 99% 的数据来自一个表的报告,解锁优先级较低的表?

最佳答案

尝试查看 READ COMMITTED SNAPSHOT 而不是 NOLOCK。这意味着数据可能是“旧的”但永远不会变脏。

关于长查询中的 SQL Server 表锁 - 解决方案 : NoLock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098541/

相关文章:

mysql查询用户的每个体验id都有一行

mysql - 在 Drupal 应用程序中将 MySQL 查询转换为 SQl Server 查询

sql - 使用 join 等加速 SQL 查询

php - MySQL从另一个表插入随机值

mysql - 如何在两个表的内部联接后引用列?

sql - 你如何阅读 sqlite3 图表/流程图?

sql-server - 来自 SQL Server 和 Db2 的表之间的数据同步 - 如何删除行

sql-server - 优化表 "tblA"内连接与 "tblA"的查询和使用

sql-server - 光标内的IDENTITY_INSERT ON不允许插入ID

php - 无法使用预准备语句将链接插入 MySql