如果我在SQL Server中执行类似的操作......
select *
from mytable
where 1=1
... 1=1
条件是否得到优化,或者实际上是否对每一行进行了评估?
我也有兴趣了解其他DBMS在这方面的表现,尤其是MySQL。
答案 0 :(得分:2)
SQL Server:
第一个例子:
SQL Server查询优化器会自动删除 1=1
谓词,因为它总是true
:
第二个例子:
由于1=2
谓词始终为false
,执行计划不包含数据访问运算符(Table
/ Index
Scan
/ { {1}})从Seek
表中读取数据。相反,执行计划包括一个dbo.Customer
运算符,该运算符将返回Constant Scan
表中没有任何行的列列表。这是contradiction detection的实际操作: - )
注意:我使用的是SQL Server 2012 Developer Edition。
答案 1 :(得分:0)
使用EXPLAIN PLAN
表示MySQL,SET SHOWPLAN_ALL ON
表示SQL Server