1,如果Where子句中有索引,则肯定是按照索引扫描,是不是子句中索引列和非索引列顺序无所谓?
2,如果Where子句中没有索引,则如果好几个条件,Oracle解析时是否按照从右向左进行,是不是要把尽可能过滤最多记录的条件放在最右边?
谢谢!

解决方案 »

  1.   

    1、有索引的最好优先进行,使得返回的结果集最少。尽量将该列放在where子句的最后2、是的,一个原则,要使得最先返回的结果集尽量的少,后面的条件返回结果集才会相对快一些
      

  2.   

    怎么回事?和我们这的DBA说法相反:他认为能尽可能过滤掉最多记录的条件应放在where 的最后面
      

  3.   

    说错了,和我们这的DBA说法相反:他认为能尽可能过滤掉最多记录的条件应放在where 的最前面,比如说:where A='a' and B='b';如果B=‘b’能过滤大部分记录,则我们这的DBA认为应该这样写:where B='b'and A='a'
      

  4.   

    正解:能尽可能过滤掉最多记录的条件应放在where 的最后面
      

  5.   

    正解:能尽可能过滤掉最多记录的条件应放在where 的最后面
      

  6.   

    具体来说,在ora9i之前的版本,这个方面可能会比较受到影响。此外还和优化规则有关系。所以在9i(不确定),在10g之后,如果使用cbo方式,则不会有影响的。应该可以在performance tuning 可以找到。
    尚未确定,有待高人详解。