背景:我想运行一个性能关键型查询,我不关心脏读.

我的问题是;如果我正在使用连接,我是否也必须在这些连接上指定NOLOCK提示?

例如;是:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b WITH (NOLOCK) ON a.ID = b.ID

相当于:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b ON a.ID = b.ID

或者我需要在联接上指定(NOLOCK)提示,以确保我没有锁定联接的表?

推荐答案

我不会直接回答你的问题.

是的,每个连接表上需要WITH(NOLOCK)个.不,你的问题不一样.

试试这个练习.开始一个事务并在表1和表2中插入一行.不要提交或回滚事务.此时,您的第一个查询将成功返回并包含未提交的行;您的第二个查询不会返回,因为表2没有WITH(NOLOCK)提示.

Sql相关问答推荐

如何在一个范围内进行分组.""范围值在范围表中定义

在SQL中将相同且紧挨着的元素进行分组

查询页面推荐

如何计算给定日期前三个月的值以及月初数据?

我需要一个regexp_like来只验证字母D或T、数字和管道

在Netezza SQL中将字符DataType转换为整型DataType

比较SQL中以逗号分隔的字符串

统计PostgreSQL中前10个最大大小表的行数

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

将时间范围划分为全天和前后剩余小时

在SQL中转换差异表的多列

如何 for each id创建长度等于id长度的不同日期序列?

Oracle 21c 中的递归查询回顾过go 3 周

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

SQL for Smarties 类型问题:从表中 Select 记录,并对某些值进行分组

使用给定的变量对在循环中执行更新语句

Snowflake 中的对象是如何比较的?

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

查找具有相同连接列数据的所有记录

PostgreSQL 如何在一组项目及其数量上找到完全相同的订单?