微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,而不是查询提示.稍后修复隔离级别而不是修改每个查询会更容易.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐