前面講了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:\temp\analyze_table.sql
select 'analyze table '||table_name||' compute statistics;' from user_tables;
spool off
spool d:\temp\analyze_index.sql
select 'analyze index '||index_name||' compute statistics;' from user_indexes;
spool off
上面的sql將對我們的表和索引產生批量的sql,我們再執行這些sql就行了。
ok,這些就是oracle的優化機理和我們人為的影響了,相信大家明白了,希望對大家有所幫助。
Oracle的優化原理
前面講了oracle效能調優原則,但是可能有許多朋友不知道oracle優化機理到底是什麼?下面作一簡單說明。解釋 先說明一下,oracle有乙個優化器 optimizer oracle的優化機理就是從optimizer開始的。明確兩個概念 optimizer 對oracle的優化方式有兩種,一種是基...
Oracle的優化原理
先說明一下,oracle有乙個優化器 optimizer oracle的優化機理就是從optimizer開始的。明確兩個概念 optimizer 對oracle的優化方式有兩種,一種是基於規則的,我們稱為rbo rule based optimization 一種是基於代價的cbo cost bas...
Oracle認證 Oracle優化器的優化方式
oracle是世界領先的資訊管理軟體開發商,因其複雜的關聯式資料庫產品而聞名。本文介紹oracle優化器,它是乙個非常好用的工具。oracle在執行乙個sql之前,首先要分析一下語句的執行計畫,然後再按執行計畫去執行。分析語句的執行計畫的工作是由優化器 optimizer 來完成的。不同的情況,一條...