【发布时间】:2021-12-10 00:07:02
【问题描述】:
来自 SQLServer SELECT docs:
以下步骤显示了 SELECT 语句的逻辑处理顺序或绑定顺序。此顺序确定一个步骤中定义的对象何时可用于后续步骤中的子句。例如,如果查询处理器可以绑定(访问)在 FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤。
- 来自
- 开启
- 加入
我的问题是执行计划中ON和JOIN有什么区别?例如,如果查询是这样的:
SELECT *
FROM person JOIN county ON person.nationality=country.code
我知道第一步是检查FROM 表的权限:
- 用户是否有权访问表
person和country?
但是,例如,如果执行嵌套循环连接来连接两个表,ON 和JOIN 之间有什么区别?基于这种差异,为什么ON 需要在JOIN 之前出现?
我想我唯一能想到的是它会首先检查ON 子句以确保连接有意义。两个例子可能是:
SELECT *
FROM person JOIN county ON 1=0 -- never need to do the join
还有:
SELECT *
FROM person JOIN county ON person.badcolumn = country.code
【问题讨论】:
标签: sql sql-server sql-execution-plan