这个问题在这里已经有了答案:
10 年前关闭。
Possible Duplicate:
Is the SQL WHERE clause short-circuit evaluated?
我对此查询有以下疑问:
select * from sometable
where 1=1 or (select count(*) from table2 > 0)
如果第一个条件为真(
1=1
),SQL Server 是否仍然执行内部选择?还是在第一个条件为真时停止(如 C)
最佳答案
当 (1=1) 为真时停止。您可以使用 Ctrl-M 然后 Ctrl-E 轻松检查
考虑这个查询
select * from master..spt_values
where 1=1 or (select count(*) from master..sysobjects) > 0
执行计划仅显示
master..spt_values
中的扫描并且在 sysobjects
中没有事件.与C相反,当时它不会停止最左边 条件为真,相反查询优化器计算出 独立于所呈现的顺序 这是评估的最低成本。对于常量
1 vs 1
赢家很明显。
关于SQL Server 性能提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032882/