程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> ORACLE SQL性能優化系列(五)

ORACLE SQL性能優化系列(五)

編輯:關於Oracle數據庫

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子句中.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved