type列有 1,2,3 三个值,无索引。
现需要卡1,2取数,三种写法:
第一种:type<>3
第二种:type in (1,2)
第三种:type=1 or type=2
哪种写法查询快?为什么?菜鸟求问简单问题,望不吝赐教,若有更优的写法请说明。

解决方案 »

  1.   

    一般说来  查询花费时间由大到小排序 2 > 3 > 1 
      

  2.   

    2和3  时间差距特别小  因为模式是差不多的  oracle中通常都会把or转换成in来查询 具体的时间 要看执行计划了  可能有其他方面的影响
      

  3.   

    在CBO的模式下,2和3会转化成同样的路径(11g环境)
      

  4.   

    中间用union all连接
    select count(*) from 
    ( select * from 表名 where type=1 
    union all
    select * from 表名 where type=2 ) 
      

  5.   

    如果1经常被读到
    第三种:type=1 or type=2
    这是比较快的
    type=2优化器是不会再去进行逻辑判断
      

  6.   

    可自己去看oracle的执行计划,查询速度的效率,关键是查是否用到索引,索引查询效率比较高
      

  7.   

    也是 set autot traceonly看看执行计划
    如果只有这个查询或者说这个比较常用 不妨物化它,直接查询重写,建个mv
      

  8.   

    如果该列只有三个值而且表很大的话,可以考虑建立Bitmap索引查询。
      

  9.   

    然后查询条件改成>=2 或 <3