• λ我爱Aspx >> C#.Net >> ORACLE优化器 _数据库技巧
  • ORACLE优化器 _数据库技巧

  • :aspxer  Դ:internet  :2007-4-28 23:46:48  ؼ:数据库,数据
  • AND H.HIST_TYPE = T.HIST_TYPE

    GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;

    通过调用下面的函数可以提高效率.

    FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2

    AS

    TDESC VARCHAR2(30);

    CURSOR C1 IS

    SELECT TYPE_DESC

    FROM HISTORY_TYPE

    WHERE HIST_TYPE = TYP;

    BEGIN

    OPEN C1;

    FETCH C1 INTO TDESC;

    CLOSE C1;

    RETURN (NVL(TDESC,’?’));

    END;

    FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2

    AS

    ENAME VARCHAR2(30);

    CURSOR C1 IS

    SELECT ENAME

    FROM EMP

    WHERE EMPNO=EMP;

    BEGIN

    OPEN C1;

    FETCH C1 INTO ENAME;

    CLOSE C1;

    RETURN (NVL(ENAME,’?’));

    END;

    SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),

    H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)

    FROM EMP_HISTORY H

    GROUP BY H.EMPNO , H.HIST_TYPE;

    (译者按: 经常在论坛中看到如 ’能不能用一个SQL写出….’ 的贴子, 殊不知复杂的SQL往往牺牲了执行效率. 能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的)

    17. 使用表的别名(Alias)

    当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.

    (译者注: Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)

    18. 用EXISTS替代IN

    在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.

    低效:

    SELECT *

    FROM EMP (基础表)

    WHERE EMPNO > 0

    AND DEPTNO IN (SELECT DEPTNO

    FROM DEPT

    WHERE LOC = ‘MELB’)

    高效:

    SELECT *

    FROM EMP (基础表)

    Ҷƪл˵?
  • һƪWindows 2000下优化Oracle9i性能_数据库技巧
    һƪ优化Oracle库表设计的若干方法_数据库技巧