我想真正的问题是:

如果我不关心脏读,向SELECT语句添加with (NOLOCK)提示会影响以下语句的性能:

  1. 当前SELECT语句
  2. 针对给定表的其他事务

例子:

Select * 
from aTable with (NOLOCK)

推荐答案

1) YesNOLOCK的 Select 将比正常 Select 更快完成.

2) Yes,如果 Select 值为NOLOCK,则针对受影响表的其他查询将比正常 Select 更快完成.

Why would this be?

NOLOCK通常(取决于你的数据库引擎)意味着把你的数据给我,我不在乎它处于什么状态,也不介意在你阅读数据时把它保持静止.它的速度更快,资源密集度更低,而且非常危险.

应该警告您,不要从系统关键的位置进行更新或执行任何操作,或者使用源自NOLOCK次读取的数据要求绝对正确.此数据绝对可能包含在查询运行期间删除的行,或在其他尚未完成的会话中删除的行.此数据可能包括已部分更新的行.此数据可能包含违反外键约束的记录.此数据可能不包括已添加到表中但尚未提交的行.

You really have no way to know what the state of the data is.

如果您试图获取行计数或其他可以接受一定误差的摘要数据,那么NOLOCK是提高这些查询性能并避免它们对数据库性能产生负面影响的好方法.

Always use the 100 hint with great caution and treat any data it returns suspiciously.

Sql相关问答推荐

需要解决办法通过传递过程参数而不是声明表行类型来声明表类型

如何在T—SQL中找到值更改之前的日期?

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

查询多个表并返回合并在联合列上的所有表中的所有行

如何连接第二个表并将其内容输入到第一个表的单个字段中?

删除MariaDB数据库中的JSON数据

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

直接加法(1+1)与聚合函数SUM(1+1)的区别是什么

导出部分条形码字符串GS1-128

在Power Bi中将SQL代码转换为DAX

在同一列上迭代时计算持续时间

GRAFANA 数据库查询错误:pq:列名称不存在

JSON_VALUE 不适用于提取的 json 中的嵌套路径

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

如何为 ActiveRecord 联接应用附加条件

避免在SQL中使用具有相同条件的多个子查询

如何将 CONCATENATED 值与临时表中的值匹配

SQL查询以获取从特定可变日期看到的用户

为每组填写行以进行旋转

如何在 Trino/Presto 中过滤掉 map 中的某些键?