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

ORACLE SQL性能優化系列(七)

編輯:關於Oracle數據庫

12.       盡量多使用COMMIT 只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少:  COMMIT所釋放的資源:

a.       回滾段上用於恢復數據的信息.

b.       被程序語句獲得的鎖

c.       redo log buffer 中的空間

d.       Oracle為治理上述3種資源中的內部花費 (譯者按: 在使用COMMIT時必須要注重到事務的完整性,現實中效率和事務完整性往往是魚和熊掌不可得兼)

13.       計算記錄條數      和一般的觀點相反, count(*) 比count(1)稍快 , 當然假如可以通過索引檢索,對索引列的計數仍然是最快的. 例如 COUNT(EMPNO)

(譯者按: 在CSDN論壇中,曾經對此有過相當熱烈的討論, 作者的觀點並不十分准確,通過實際的測試,上述三種方法並沒有顯著的性能差別)

14.       用Where子句替換HAVING子句      避免使用HAVING子句, HAVING 只會在檢索出所有記錄之後才對結果集進行過濾. 這個處理需要排序,總計等操作. 假如能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷.
例如:
     低效:      SELECT REGION,AVG(LOG_SIZE)      FROM LOCATION      GROUP BY REGION      HAVING REGION REGION != ‘SYDNEY’      AND REGION != ‘PERTH’      高效      SELECT REGION,AVG(LOG_SIZE)      FROM LOCATION      WHERE REGION REGION != ‘SYDNEY’      AND REGION != ‘PERTH’      GROUP BY REGION (譯者按: HAVING 中的條件一般用於對一些集合函數的比較,如COUNT() 等等. 除此而外,一般的條件應該寫在WHERE子句中) 15.       減少對表的查詢
在含有子查詢的SQL語句中,要非凡注重減少對表的查詢. 例如:
     低效           SELECT TAB_NAME           FROM TABLES           WHERE TAB_NAME = ( SELECT TAB_NAME                                 FROM TAB_COLUMNS                                 WHERE VERSION = 604)           AND DB_VER= ( SELECT DB_VER                            FROM TAB_COLUMNS                            WHERE VERSION = 604)      高效           SELECT TAB_NAME           FROM TABLES           WHERE  (TAB_NAME,DB_VER)  = ( SELECT TAB_NAME,DB_VER)                   FROM TAB_COLUMNS                    WHERE VERSION = 604)      Update 多個Column 例子:      低效:

           UPDATE EMP            SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),               SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)            WHERE EMP_DEPT = 0020;     高效:            UPDATE EMP            SET (EMP_CAT, SAL_RANGE)  = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)  FROM EMP_CATEGORIES)            WHERE EMP_DEPT = 0020;

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