熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE SQL性能優化系列 (三)

2013-11-13 22:12:57  來源: Oracle 

   使用DECODE函數來減少處理時間
  
  
  
  使用DECODE函數可以避免重復掃描相同記錄或重復連接相同的表
  
  
  
  例如:
  
   SELECT COUNT(*)SUM(SAL)
  
   FROM EMP
  
   WHERE DEPT_NO =
  
   AND ENAME LIKE SMITH%;
  
  
  
   SELECT COUNT(*)SUM(SAL)
  
   FROM EMP
  
   WHERE DEPT_NO =
  
   AND ENAME LIKE SMITH%;
  
  
  
  你可以用DECODE函數高效地得到相同結果
  
  
  
  SELECT COUNT(DECODE(DEPT_NOXNULL)) D_COUNT
  
   COUNT(DECODE(DEPT_NOXNULL)) D_COUNT
  
   SUM(DECODE(DEPT_NOSALNULL)) D_SAL
  
   SUM(DECODE(DEPT_NOSALNULL)) D_SAL
  
  FROM EMP WHERE ENAME LIKE SMITH%;
  
  
  
  類似的DECODE函數也可以運用於GROUP BY 和ORDER BY子句中
  
  
  
  
  
   整合簡單無關聯的數據庫訪問
  
  
  
  如果你有幾個簡單的數據庫查詢語句你可以把它們整合到一個查詢中(即使它們之間沒有關系)
  
  例如:
  
  
  
  SELECT NAME
  
  FROM EMP
  
  WHERE EMP_NO = ;
  
  
  
  SELECT NAME
  
  FROM DPT
  
  WHERE DPT_NO = ;
  
  
  
  SELECT NAME
  
  FROM CAT
  
  WHERE CAT_TYPE = RD;
  
  
  
  上面的個查詢可以被合並成一個:
  
  
  
  SELECT ENAME DNAME CNAME
  
  FROM CAT C DPT D EMP EDUAL X
  
  WHERE NVL(XXDUMMY) = NVL(XEROWID(+))
  
  AND NVL(XXDUMMY) = NVL(XDROWID(+))
  
  AND NVL(XXDUMMY) = NVL(XCROWID(+))
  
  AND EEMP_NO(+) =
  
  AND DDEPT_NO(+) =
  
  AND CCAT_TYPE(+) = RD;
  
  
  
  (譯者按: 雖然采取這種方法效率得到提高但是程序的可讀性大大降低所以讀者 還是要權衡之間的利弊)
  
  
  
   刪除重復記錄
  
  最高效的刪除重復記錄方法 ( 因為使用了ROWID)
  
  
  
  DELETE FROM EMP E
  
  WHERE EROWID > (SELECT MIN(XROWID)
  
   FROM EMP X
  
   WHERE XEMP_NO = EEMP_NO);
  
  
  
   用TRUNCATE替代DELETE
  
  當刪除表中的記錄時在通常情況下 回滾段(rollback segments ) 用來存放可以被恢復的信息 如果你沒有COMMIT事務ORACLE會將數據恢復到刪除之前的狀態(准確地說是
  
  恢復到執行刪除命令之前的狀況)
  
  
  
  而當運用TRUNCATE時 回滾段不再存放任何可被恢復的信息當命令運行後數據不能被恢復因此很少的資源被調用執行時間也會很短
  
  
  
  (譯者按: TRUNCATE只在刪除全表適用TRUNCATE是DDL不是DML)
  
  
  
  
  
   盡量多使用COMMIT
  
  
  
  只要有可能在程序中盡量多使用COMMIT 這樣程序的性能得到提高需求也會因為COMMIT所釋放的資源而減少:
  
   COMMIT所釋放的資源:
  
  a 回滾段上用於恢復數據的信息
  
  b 被程序語句獲得的鎖
  
  c redo log buffer 中的空間
  
  d ORACLE為管理上述種資源中的內部花費
  
  
  
  (譯者按: 在使用COMMIT時必須要注意到事務的完整性現實中效率和事務完整性往往是魚和熊掌不可得兼)

From:http://tw.wingwit.com/Article/program/Oracle/201311/18499.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.