【问题标题】:If the first condition is FALSE then the second condition is checked in SQL Server?如果第一个条件为 FALSE,那么在 SQL Server 中检查第二个条件?
【发布时间】:2020-06-26 16:37:36
【问题描述】:
在where 子句中,如果第一个条件为 FALSE,那么在 SQL Server 中检查第二个条件?
例如
select *
from users
where (condition 1) AND (condition 2)
如果条件 1 为 False,是否会检查条件 2?
【问题讨论】:
-
SQL Server 无法保证语句是否或以何种顺序在 WHERE 子句中处理,Details
标签:
sql-server
where-clause
【解决方案1】:
SQL 是声明性的。不是程序性的。
优化器可以使用短路评估,也可以不使用。
它也可以将其转换为不同的东西。如果列是整数类型,所有三个条件都折叠到
WHERE 列 > 1
同样,优化器可能会发现某些条件通过检查约束或查询中的其他谓词来保证为真或假,并且根本不需要评估。或者使用保证所有行都匹配谓词的一部分的访问路径(例如过滤索引),因此不需要运行时评估。
Read This
【解决方案2】:
无论优先级如何,条件都会检查直到第一个为假...
例子:
select 'Divide by zero error.'
where 1=1 and (1/0 = 1)
select 'No Divide by zero error'
where 1=0 and (1/0 = 1)
【解决方案3】:
它是不确定的。您不能依赖评估顺序。
SQL Server 查询优化器负责解析 T-SQL 查询并根据表大小、索引等创建执行计划。因此,针对相同数据库架构的相同 T-SQL 语句可能会根据数据库内容、配置等不同执行.
查询优化器优先考虑执行速度,并能够并行执行单个 T-SQL 语句。过滤子句的执行不太可能一个接一个地执行。