Oracle认证:SQL条件的顺序对性能的影响
来源:优易学  2011-9-28 14:42:14   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 170

  SQL> select count(*) from诊疗项目目录where类别='Z' and操作类型='1';

  COUNT(*)

  ----------

  1

  Declare

  V1 Varchar2(20);

  Begin

  For I In 1 .. 1000 Loop

  --Select名称Into V1 From诊疗项目目录Where类别= 'Z' And操作类型= '1';

  select名称Into V1 from诊疗项目目录where操作类型='1' and类别='Z';

  End Loop;

  End;

  /

  上面的SQL按两种方式分别执行了1000次查询,结果如下:

  操作类型= '1'在最右|类别='Z'在最右

  0.093                          |    1.014

  1.06                            |    0.999

  0.998                          |    1.014

  按理说,从右到左的顺序执行,“类别='Z'”在最右边时,先过滤得到170条记录,再从中找符合“操作类型 = '1'”的,比较而言,“操作类型 = '1'”在最右边时,先过滤得到3251条记录,再从中找符合“类别='Z'”,效率应该要低些,而实际结果却是两者所共的时间差不多。

  其实,从Oracle的数据访问原理来分析,两种顺序的写法,执行计划都是一样的,都是全表扫描,都要依次访问该表的所有数据块,对每一个数据块中的行,逐一检查是否同时符合两个条件。所以,就不存在先过滤出多少条数据的问题。

  综上所述,Where子句中条件的顺序对性能没有影响(不管是CBO还是RBO优化器模式),注意,额外说一下,这里只是说条件的顺序,不包含表的顺序。在RBO优化器模式下,表应按结果记录数从大到小的顺序从左到右来排列,因为表间连接时,最右边的表会被放到嵌套循环的最外层。最外层的循环次数越少,效率越高。

上一页  [1] [2] [3] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训