度量快速开发平台-专业、快速的软件定制快开平台

标题: SQL中的1=1影响性能吗? [打印本页]

作者: 万望    时间: 2020-2-16 09:28

作者: 万望    时间: 2020-6-28 23:58
标题: SQL中的1=1影响性能吗?

数据库在进行查询的时候,经常看到有的人使用where 1=1和1=0,1=2等的查询,这样写主要是一些程序员为了拼凑动态的sql语句。

在不定数量查询条件情况下,1=1可以很方便的规范语句。例如一个查询可能有name,age,height,weight约束,也可能没有。


SQL Server中的1=1影响性能吗?


1、查询分析器在代数树优化阶段就把1=1 直接给过滤掉了。这个功能就是查询优化器中所谓的“Constant Folding”。

2、假设查询分析器在代数树优化阶段没有把where 1=1这种情况直接过滤掉。比如语句select * from table where a=1 这个语句,SQL Server估计的行数会是:

a列的选择率*表中采样的总行数

因此,当Where 1=1 and a=1时,结果就变为

1*a列的选择率 *表中采样的总行数=a列的选择率 *表中采样的总行数

因此无论是否有1=1 and,查询分析器都会估计相同的行数,从而拥有同样的执行计划,因此SQL Server中不影响性能。



作者: 陈晓龙    时间: 2020-6-29 13:38
开眼界了!
作者: 张兴康    时间: 2020-6-29 15:46
恩解释得挺好
作者: 王爱东    时间: 2020-6-29 16:15
解释的不错,估计不会影响性能。不过在oracle中就不一定了。涉及到执行顺序,索引等。
作者: 万望    时间: 2020-7-28 23:38
有意思




欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2