SELECT * FROM T_Employee WHERE 1=1 这看似非常优美的解决了问题,殊不知这样很可能会造成非常大的性能损失,因为使用添 加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫 对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的 时候查询速度会非常慢。因此如果数据检索对性能有比较高的要求就不要使用这种“简便”的方 式。

解决方案 »

  1.   

    应该是没有影响的。sql server优化器会自动优化where 中的条件。如果你写的是where 1=1,那么就相当于没有查询条件一样。如果你写的是where 1<>1 ,那么直接就不返回任何结果集。
      

  2.   

    肯定是有一点影响,一个要走where条件,一个不用走where,数据小可以忽略不计,数据大才会看出来。
      

  3.   


    我也搜索过相关文章,关键就是走不走索引的问题。好像经过优化,还是会走索引的我在2008和2005都用过这种方法,主要用于拼接而成的sql语句,因为where 后面的条件是不确定的,所以就加上了1=1,没有什么影响的。在2000上没有测试过这种情况,你有2000的环境,可以自己测试一下会不会有影响的
      

  4.   

    完全没有影响,SQL会自动优化!
      

  5.   

    亲,你为啥要有where 1=1呢??
      

  6.   

    有时候确实要用到where 1=1,例如在使用动态SQL的时候,又不确定后面到底是否还有条件,那么首先就定义 @sql = 'where 1=1',然后要组的条件都可以写成 @where = 'AND ……',这样就可以直接组合字符串@sql + @where
      

  7.   

    mssql 没有影响。。你可以看执行计划mongodb  有特别大的影响。mongodb不能这样写。
      

  8.   

    SQL  Server的执行计划没那么傻的,你自己试试看就知道了。会直接无视1=1,执行后面的操作。索引之类的是完全可以用到的。
    再举个例子如果1=2 and 后面再加一些Filter,你会看到SQL Server压根就不考虑AND后面的操作,直接到1=2就返回了,因为知道这个是不成立的,没必要走后面的步骤了。