在SQLSERVER中,WHERE 1=1 会降低查询效率吗?

今天偶然看到了一个讨论,在某些情况下,需要向查询子句用AND选择性拼接筛选条件。为了让SQL语句不会报错,会在WHERE后面增加一个1=1的查询条件。
例如

SELECT * FROM TABLE WHERE 1=1 [AND Expression1] [AND Expression2] [AND Expression3]……

那么为了防止语句报错所添加的1=1到底会不会影响查询的性能呢?以下我再SQLSERVER中做了实验。

首先我找到了一个有20万数据的表,然后用以下四条SQL语句分别进行了查询,最后通过执行计划来分析1=1的影响。
四条语句分别为:

SELECT * FROM t_CustInfo

SELECT * FROM t_CustInfo WHERE 1=1

SELECT * FROM t_CustInfo WHERE id= 119068625 

SELECT * FROM t_CustInfo WHERE 1=1 AND id= 119068625  

1.SELECT * FROM t_CustInfo
这条语句对表的所有列进行查询,理论上讲是会消耗最长的时间

图片.png

经过查询得出以上结果

2.SELECT * FROM t_CustInfo WHERE 1=1
接下来,我在条件中加入1=1,看看查询结果与第一条有什么差异

图片.png

从要读取的行数和,IO开销来看,以上两条语句,并没有太大差别。

3.SELECT * FROM t_CustInfo WHERE id= 119068625
接下来通过主键进行搜索,SQLSERVER的主键即是索引,理论上讲这样的搜索速度会很快

图片.png

果然,IO的消耗减少了非常多,而且读取的行数只有一行,效率非常高

4.SELECT * FROM t_CustInfo WHERE 1=1 AND id= 119068625
那么最后,把1=1和索引同时使用,SQLSEVER是会读取20万行呢?还是只会读取一行?

图片.png

结果显示,添加1=1条件,并不会让查询读取所有的行,与不添加1=1的索引查询过程是相同的。

最终结论得出,在SQL SERVER中,WHERE 1=1 并不会影响查询性能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。