请问一下下面的两条sql语句在性能上有区别吗?
select * from t where name = 'Bob' and salary > 20000 
select * from t where 1=1 and name = 'Bob' and salary > 20000 第二条语句加了where1=1会对性能有影响吗?

解决方案 »

  1.   

    没有影响,一般是拼动态SQL的时候才会用where 1=1
      

  2.   

    你可以执行下autotrace,看一下sql的统计信息,可以找到答案.我在外面,没有测试环境.
      

  3.   

    没有影响,一般是拼动态SQL的时候才会用where 1=1
      

  4.   

    有影响....
    上次我写一个过程..里面...一条SQL就写了...1=1...
    结果运行.很慢....
      

  5.   

    当然没有任何影响,Oracle在parse这句查询的时候会把静态的条件提前解析,在这里1=1会自动被忽略。
      

  6.   

    用什么办法可以测试一下呢?
    例如用PLSQL Developer工具如何分析这条语句的性能。有什么好的工具分析吗?
      

  7.   

    就是动态sql的时候才能用到。比如:
    string sql;sql='select 1 from dual where 1=1 '定义一个string a;
    a=' and 2=2 and 3=3 'excute immediate sql+a;
      

  8.   

    一般情况不会有影响,回答没有工具可分析的太扯淡了吧,你就算不知道PL-SQLDev里面有个Explain Plan Window,Oracle自己的 Explain Plan for select ....
                select * from table(dbms_xplan.display)总能用吧
                        
      

  9.   

    结果上是没有影响的,但执行时产生的执行计划是不一样,第二个应该会多耗点share_pool
      

  10.   

    没有影响 where 1=1 是 SQL动态拼接时 才用...
      

  11.   


    请将一下为什么动态拼接SQL的时候会用这样的方式??学习!
      

  12.   

    oracle cbo so intelligent,when parese the sql,it can filter the '1=1'.
    为什么拼凑where 1=1呢,当然是为了sql更简单地拼凑了啊,比如一个界面有n个选项,这些选项都是可选的,那么程序如何根据前台填写的选项来拼凑sql呢??当然是不好拼凑的,比如:
    姓名
    年龄
    职业select ... where ...
    where后面怎么拼凑??比如我现在只选“年龄”,ok,where age=...,我现在选“年龄”和“职业”,where age=.. and career=...,。当然用if...else...什么的也拼凑,大不了全部用and condition拼凑完了之后将where后的第1个and 去掉,用where 1=1先顶死,然后全部用and condition拼凑就简洁多了,而且CBO会过滤1=1,当他是不存在的,多好。其他的数据库可能不一定优化器会过滤。
    1<> 1 or是类似的