日期:2014-05-17  浏览次数:20559 次

求教where 1=1 是否影响查询效率?
观点1:使用了“1=1”这样的过滤条件后数据库就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描以比较此行是否满足过滤条件,当表中的数据量非常大的时候效率会显得非常慢。

情况:存储过程中多条件查询,由于查询条件的不确定,需要正确写出where后的条件语句

观点2:mssql在多个条件下,会自动优化查询,以下两个语句是等效的
sql语句1——where 条件1 and 条件2
sql语句2——where 条件2 and 条件1

这样就让我很模糊了~
头痛的sql语句:where 1=1 and 聚集索引 and 非聚集索引

按照观点1和观点2,到底这个sql语句是否会使用索引?

------解决方案--------------------
的确见过很多人在动态SQL中使用1=2来保证where条件不抱错,刚才找了一个正式库试了一下,where 1=1 and xxx>0这样的条件,是聚集索引查找,证明用到了索引,你最好打开执行计划,自己看一下效果。
------解决方案--------------------
#1.生产中用过,加上1=1,不会影响索引的使用。SQL SERVER还是比较智能的。
#2.是否会使用索引,跟统计信息,优化器的成本计算方法有关。是否会使用索引,得看最终环境下的,最终生成的执行计划。如果不走索引,你可以用一些方法来引导它走索引。