为什么SQL语句Where 1=1 and在SQL Server中不影响性能

2025-03-24 16:41:27
推荐回答(1个)
回答1:

因为查询分析器在代数树优化阶段就把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,查询分析器都会估计相同的行数,从而拥有同样的执行计划,因此不影响性能。