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

Oracle的優化原理

編輯:關於Oracle數據庫

    前面講了ORACLE性能調優原則,但是可能有許多朋友不知道ORACLE優化機理到底是什麼?下面作一簡單說明。

    解釋

    先說明一下,ORACLE有一個優化器(Optimizer),ORACLE的優化機理就是從Optimizer開始的。

    明確兩個概念:Optimizer 對ORACLE的優化方式有兩種,一種是基於規則的,我們稱為RBO(Rule-Based Optimization),一種是基於代價的CBO(Cost-Based Optimization),我們從字面就可基本理解這兩個優化方式的含義,不錯,RBO是根據ORACLE的內定規則實現的,比如我在“ORACLE性能調優原則”中講到的:索引,索引就是ORACLE的內定規則;而對於CBO,由於是基於代價的,也就是ORACLE機器的資源了,比如CPU和內存等,這個時候有朋友就問了,既然有這兩個方式,那ORACLE到底如何選擇呢,其實,這個問題有一半需要我們自己回答,有一半由ORACLE回答。因為我們在安裝ORACLE時就已決定了ORACLE到底調用什麼方式,這個就是init.ora中設定的OPTIMIZER_MODE參數,如果我們設為OPTIMIZER_MODE=RULE,它就會按RBO方式進行,反之按CBO了。當然,我們在開發程序時也可認為的改變規則,如SQL:

    SELECT /*RULE*/  *  FROM  TABLE_NAME ,這個就使ORACLE強制使用RBO規則了,當然,ORACLE也比較“聰明”,它會根據用戶檢索表和該表的索引的統計信息來選擇優化方式了,這裡就出現了一個問題了,如果統計信息是陳舊的或者說是錯誤的,我們就必須用analyze人為的對表和索引進行重新統計了。

    ORACLE的優化模式有如下幾種:RULE,CHOOSE,FIRSTROWS,ALLROWS四種,這四種模式必須和前面講的優化方式放在一起解釋,CHOOSE就是選擇的意思,如果有表和索引有統計信息,ORACLE就會CHOOSE CBO的優化方式了。對於FIRSTROWS,我給的解釋是它和CHOOSE差不多,只是以最快的方式返回前面的記錄行了;當然了ALLROWS就是以最快的方式返回所有行。

    以上講了ORACLE的優化方式和優化模式,以及ORACLE如何選擇,下面我再講講我們認為的改變ORACLE的優化了:

    1、修改ORACLE的init.ora的OPTIMIZER_MODE參數;

    2、在寫SQL時人為指定優化方式,如:SELECT /*RULE*/  *  FROM  TABLE_NAME

    3、為不讓ORACLE犯錯誤,我們有必要在日常維護中使用如下語句來優化表和索引:

    spool d: empanalyze_table.sql

    SELECT 'analyze table '||table_name||' compute statistics;' from user_tables;

    spool off

    spool d: empanalyze_index.sql

    SELECT 'analyze index '||index_name||' compute statistics;' from user_indexes;

    spool off

    上面的SQL將對我們的表和索引產生批量的SQL,我們再執行這些SQL就行了。

    OK,這些就是ORACLE的優化機理和我們人為的影響了,相信大家明白了,希望對大家有所幫助。

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