ORACLE SQL功用优化系列(五)

  前导发轫:网海拾贝




7.     镌汰拜访数据库的次数


当实行每条SQL语句时, ORACLE在内部实行了良多任务: 剖析SQL语句, 预算索引的运用率, 绑定变量 , 读数据块等等. 由此可见, 镌汰拜访数据库的次数 , 就能理论上镌汰ORACLE的任务量.

例如,

    以下有三种体式技俩可以检索出雇员号即是0342或0291的职员.


体式技俩1 (最低效)


    SELECT EMP_NAME , SALARY , GRADE

    FROM EMP

    WHERE EMP_NO = 342;

    SELECT EMP_NAME , SALARY , GRADE

    FROM EMP

    WHERE EMP_NO = 291;


体式技俩2 (次低效)


    DECLARE

        CURSOR C1 (E_NO NUMBER) IS

        SELECT EMP_NAME,SALARY,GRADE

        FROM EMP

        WHERE EMP_NO = E_NO;

    BEGIN

        OPEN C1(342);

        FETCH C1 INTO …,..,.. ;

        …..

        OPEN C1(291);

       FETCH C1 INTO …,..,.. ;

         CLOSE C1;

      END;

体式技俩3 (高效)


    SELECT A.EMP_NAME , A.SALARY , A.GRADE,


            B.EMP_NAME , B.SALARY , B.GRADE


    FROM EMP A,EMP B


    WHERE A.EMP_NO = 342


    AND   B.EMP_NO = 291;


详尽:


在SQL*Plus , SQL*Forms和Pro*C中从头设置ARRAYSIZE参数, 可以增加每次数据库拜访的检索数据量 ,提议值为200

8.       运用DECODE函数来镌汰处理惩时间

运用DECODE函数可以防止反复扫描雷同纪录或反复衔接雷同的表.


例如:


   SELECT COUNT(*),SUM(SAL)

   FROM EMP

   WHERE DEPT_NO = 0020

   AND ENAME LIKE ‘SMITH%’;

   SELECT COUNT(*),SUM(SAL)

   FROM EMP

   WHERE DEPT_NO = 0030

   AND ENAME LIKE ‘SMITH%’;

你可以用DECODE函数高效地得到雷同终局


SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT,


        COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT,

        SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,

        SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL

FROM EMP WHERE ENAME LIKE ‘SMITH%’;


类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中.




版权声明: 原创作品,容许转载,转载时请务必以超链接形式标明文章 原始理由 、作者信息和本声明。否则将清查法令责任。

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