sql-server - SQL Server 中 WITH(NOLOCK) 的使用
问题描述
我有一个关于WITH (NOLOCK / READPAST)
在 SQL Server 中使用的问题。
当我WITH (NOLOCK / READPAST)
在一个或两个表上使用提示时,并且我在 JOIN 中有其他表时,我应该对所有表使用该提示,还是只对我知道有此需求的表使用该提示?
解决方案
正如 GSerg 在评论表提示中指出的那样,每个表都使用。
OP 评论说她/他正在使用它来阅读日志。我假设日志表不是“索引丰富”的原因有很多,主要是插入性能。
(NOLOCK)
很少或没有索引查询该日志将是一件痛苦的事情,并且很容易退化为表扫描,在一个被大量更新(通过插入)的表上执行它确实会导致 a是合理的少数情况之一。
在连接中的任何表上使用提示,您不怕脏读或丢失锁定行。
编辑
Jeroen 和 Lamu 在评论中为我们提供了一些很好的见解。我知道很多时候我们无法改变模式,只能适应并尽力做到最好。但是,如果您可以通过更改表/模式来改进您的日志记录/审计功能,请执行此操作。
推荐阅读
- javascript - 道具类型失败:提供给“按钮”的“对象”类型的无效道具“onClick”,应为“功能”
- python - 如何处理跨多个类的运行时生成的数据?
- shader - 纹理玻璃折射和透明度
- r - 需要使导入功能更快速
- java - 我正在寻找在堆内存的 Java 应用程序中处理重复字符串的最佳方法?
- node.js - 从文件加载的一个 if 语句中的多个条件
- java - 如何使用 Volley 向 Java 中的 JSON 发出带有参数的 GET 请求?
- sql - 如何在 postgres 中创建函数
- django - Heroku 似乎没有将我的管理静态文件添加到 static_root
- c# - 如何检查 XAML 中的复选框?