比如where后面大概有7 8个判断,这个顺序会不会影响到执行效率。

解决方案 »

  1.   

    9i及以前的RBO会,10g及以后一般用CBO,顺序就没影响了。
      

  2.   

    这位达人,比如我这么判断where t.state=0 and t.date >=某个日期 and。,其余的都是在第一个基础上集合的判断。这会影响么?
      

  3.   


    如果你的state这个字段的值很单一,例如0和1,那么查询的时候速度应该没什么太大影响,如果值的类型很多的话那么还是把 日期 加在前面吧
      

  4.   

    不是很清楚,依稀记得,where 后 ,越能缩小结果范围的条件放越后面,效率越高
      

  5.   

    我看的书上是说where后面的条件判断是从右往左运行的,所以将越能缩小范围的值越放在右边。
      

  6.   

    是有影响的,虽说有CBO,但也不是什么情况下都会选择CBO的
      

  7.   

    Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当Oracle处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
    Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
      

  8.   

    条件顺序:
    10g以前采用rule优化方式时,有影响;
    10g以后无影响,因为只支持基于cost优化方式(rule参数仍然保留支持),cost时要为查询对象建立statistics信息;除了顺序,条件的多少会影响基于cost优化下的执行方式(有可能全表扫描,有可能遵循索引);
    条件多不一定查询快,条件少也不一定查询快,需要自己去跟踪查询计划或预期业务数据变化来决定使用多少个条件(当然此处条件是指可以过滤同一范围数据的条件);
      

  9.   

    以前我们公司有个高手教我们说 where条件后面越是容易分类的条件就远离where条件越模糊的就靠近where 经供参考!
      

  10.   

    CBO对where后面的字段顺序没有影响的
      

  11.   

    根据托马斯的解释是Oracle的Where字句是倒着解析的,条件越苛刻的就应该越远离靠右边,这样下一个条件的筛选范围就越小,效率也就越高。其他数据不清楚