以下是三千兄的解释:
驱动表是sql执行路径中用来最先查询的表,比如本例中第一句sql用explain plan来看
执行路径的化,应该是先搜索D表,然后根据D表中记录和WHERE条件去搜索别的表,
那样就需要搜索30万次(如果WHERE条件中没有对D的确定值限制)。而第二句SQL就会以
A表作为驱动,那样搜索的次数就大大减小了。但是这种情况只有在采用的RULE-BASED
优化器或者采用了COST-BASED优化器而相关表没有STATISTICS的时候才会出现的。如果采用了COST-BASED优化器而且对所有的表都进行了分析的话,ORACLE就能自动根据COST
值来确定优化路径,那样表的顺序就不是很有关了。所以定期地对大的、更新频繁的表作分
析是非常重要的。

解决方案 »

  1.   

    rule 模式下的规则:有两个索引存在的情况下,from后面大表在前有一个索引,则顺序无关都没有索引,则大表应该在后(这个效率我几次测试相差有60%)
      

  2.   

    biti_rainy(biti_rainy):
    现在恐怕没多少系统是用rule-based作为默认优化器的,但是实际中用户不注意对表的分析,系统被迫采用rule-based的例子倒是非常常见。
    老兄在哪里高就?我最近一个项目很大,所以很忙,有空多交流。
      

  3.   

    KingSunSha(弱水三千)不知道老兄去瑞典没有 :)
    给你发了个pm
      

  4.   

    biti_rainy(biti_rainy):
    我一家移居瑞典三个多月,基本上安顿下来了。这边的项目不错,我很感兴趣,做得挺开心的。
    不过,我现在用公司的内部网通过proxy上internet,所以上不了msn :( 等明年二月我搬到自己的公寓就能用宽带直接上网了。到时候再聊。