如果我在 SQL Server 中执行类似的操作...
select *
from mytable
where 1=1
...1=1
条件是否得到优化,或者是否实际针对每一行进行评估?
我也有兴趣了解其他 DBMS 在这方面的表现,尤其是 MySQL。
最佳答案
SQL Server:
第一个示例:
1=1
谓词会被 SQL Server 查询优化器自动删除,因为它始终为 true
:
第二个示例:
由于 1=2
谓词始终为 false
,因此执行计划不包含数据访问运算符 (Table
/ Index
Scan
/Seek
)从dbo.Customer
表中读取数据。相反,执行计划包含一个Constant Scan
运算符,它将返回dbo.Customer
表中的列列表,不包含任何行。这是contradiction detection行动中:-)
注意:我使用的是 SQL Server 2012 Developer Edition。
关于mysql - SQL Server 是否优化常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435420/