sql-server – NOLOCK总是坏的吗?

前端之家收集整理的这篇文章主要介绍了sql-server – NOLOCK总是坏的吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是一名报告开发人员,希望尽可能提高我的查询效率.我曾经和DBA一起工作,他告诉我 – 我相信因为我一直在处理生产服务器上的报告 – 在每个查询中使用NOLOCK.

现在,我与一位在任何情况下都禁止NOLOCK的DBA合作 – 即使我的报告(由于几张表上相当缺乏索引)正在停止复制和系统更新.在我看来,在这种情况下,NOLOCK将是一件好事.

由于我的大多数sql培训都有不同的DBA,我想向各种各样的DBA提出这个问题.

解决方法

如果您的报告阻止了您的DBA正确的更新:您绝对不应该使用NOLOCK.存在冲突的事实清楚地表明,如果您使用脏读,您将得到不正确的报告.

在我看来,总有比NOLOCK更好的选择:

>您的生产表是否只有效且永远不会被修改?将数据库标记为只读!
>表扫描导致锁冲突?适当地索引表,好处是多重的.
>无法修改/不知道如何正确索引?使用SNAPSHOT ISOLATION.
>无法更改应用程序以使用快照?打开read committed snapshot
>您已经测量了行版本控制的影响,并且有证据表明它会影响性能吗?你不能索引数据?和incorrect reports你还好吗?然后至少做一个忙,并使用SET TRANSACTION ISOLATION LEVEL,而不是查询提示.稍后修复隔离级别而不是修改每个查询会更容易.

猜你在找的MsSQL相关文章