因为查询分析器在代数树优化阶段就把1=1 直接给过滤掉了。这个功能就是查询优化器中所谓的“Constant Folding”。
我们这里假设查询分析器在代数树优化阶段没有把where 1=1这种情况直接过滤掉。
比如语句select * from table where a=1 and b=2 这个语句,SQL Server估计的行数会是:
a列的选择率*b列的选择率*表中采样的总行数
因此,当Where 1=1 and a=1时,结果就变为
1*a列的选择率 *表中采样的总行数=a列的选择率 *表中采样的总行数
因此无论是否有1=1 and,查询分析器都会估计相同的行数,从而拥有同样的执行计划,因此不影响性能。