关于此查询,我有以下问题:
select * from sometable where 1=1 or (select count(*) from table2 > 0)
如果第一个条件为true(1=1),SQL Server仍会进行内部选择吗?还是在第一个条件为真时停止(例如C)
1=1
当(1 = 1)为true时,它将停止。您可以先按Ctrl-M再按Ctrl-E轻松检查
考虑这个查询
select * from master..spt_values where 1=1 or (select count(*) from master..sysobjects) > 0
执行计划仅显示的扫描,master..spt_values而没有的活动sysobjects。
master..spt_values
sysobjects
与C相反,当 LEFTMOST 条件为true时,它不会停止,而是查询优化器 独立于给出的顺序 工作,这是评估成本最低的方法。在常数的情况下,1 vs 1获胜者是显而易见的。
1 vs 1