天天看點

Oracle中SQL的性能優化

【it168技術文檔】1、用exists替代in,not exists替代not in: 在子查詢中,not在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接.在這種情況下,使用exists(或notexists)通常将提高查詢的效率.

    2、用where子句替換having子句: 

   避免使用having子句, having隻會在檢索出所有記錄之後才對結果集進行過濾.

這個處理需要排序,總計等操作.如果能通過where子句限制記錄的數目,那就能減少這方面的開銷. 

   例如: 

   低效: 

    高效 

    3、使用表的别名(alias)

   當在sql語句中連接配接多個表時,請使用表的别名并把别名字首于每個column上.這樣一來,就可以減少解析的時間并減少那些由column歧義引起的文法錯誤.

    4、用exists替換distinct

   當送出一個包含一對多表資訊(比如部門表和雇員表)的查詢時,避免在select子句中使用distinct.一般可以考慮用exist替換 

   例如:

   低效:

    高效:

    低效:

     高效

    (高效,執行時間10.6秒)

     8、計算記錄條數 和一般的觀點相反,

count(*) 比count(1)稍快 ,

當然如果可以通過索引檢索,對索引列的計數仍舊是最快的. 例如 count(empno)