ORACLE SQL功用优化系列(三)

   本源:网海拾贝




4. 选择最无恪守的表名挨次(只在基于端正的优化器中有用)

ORACLE的阐冥具凭据从右到左的挨次处理FROM子句中的表名,因而FROM子句中写在末端的表(底子底细表 driving table)将被最先处理. 在FROM子句中包括多个表的环境下,你必须选择纪录条数最少的表作为底子底细表.当ORACLE处理多个表时, 会运用排序及归并的体式样式衔接它们.首先,扫描第一个表(FROM子句中末端的阿谁表)并对纪录举行派序,然后扫描第二个表(FROM子句中末端第二个表),末端将悉数从第二个表中检索出的纪录与第一个表中相宜纪录举行归并.


比喻:

     表 TAB1 16,384 笔纪录

     表 TAB2 1      笔纪录

     选择TAB2作为底子底细表 (最好的体式样式)

     select count(*) from tab1,tab2   实行时分0.96秒

    选择TAB2作为底子底细表 (欠安的体式样式)

     select count(*) from tab2,tab1   实行时分26.09秒


假若有3个以上的表衔接查询, 那就需求选择交叉表(intersection table)作为底子底细表, 交叉表是指阿谁被其他表所引用的表.


比喻:


   EMP表形貌了LOCATION表和CATEGORY表的交集.


 SELECT *


FROM LOCATION L ,


      CATEGORY C,

      EMP E

WHERE E.EMP_NO BETWEEN 1000 AND 2000


AND E.CAT_NO = C.CAT_NO


AND E.LOCN = L.LOCN

 

将比下列SQL更无恪守

 

SELECT *


FROM EMP E ,

LOCATION L ,

      CATEGORY C

WHERE  E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

AND E.EMP_NO BETWEEN 1000 AND 2000




版权声明: 原创作品,批准转载,转载时请务必以超链接形式标明文章 原始情由 、作者信息和本声明。不然将深究法规责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1976082.html