2種型別的優化器:基於規則的優化器與基於代價的優化器。
[b]基於規則的優化器 -- rule based optimization(簡稱rbo):[/b]
[b]基於代價的優化器 -- cost based optimization(簡稱cbo):[/b]
oracle把乙個代價引擎(cost engine)整合到資料庫核心中,用來估計每個執行計畫需要的代價,該代價將每個執行計畫所耗費的資源進行量化,從而cbo可以根據這個代價選擇出最優的執行計畫。
查詢耗費的資源可以被分成3個基本組成部分:i/o代價、cpu代價、network代價。
i/o代價是將資料從磁碟讀入記憶體所需的代價。訪問資料報括將資料檔案中資料塊的內容讀入到sga的資料快取記憶體中,在一般情況下,該代價是處理乙個查詢所需要的最主要代價,所以我們在優化時,乙個基本原則就是降低查詢所產生的i/o總次數。
cpu代價是處理在記憶體中資料所需要的代價,如一旦資料被讀入記憶體,則我們在識別出我們需要的資料後,在這些資料上執行排序(sort)或連線(join)操作,這需要耗費cpu資源。
對於需要訪問跨節點(即通常說的伺服器)資料庫上資料的查詢來說,存在network代價,用來量化傳輸操作耗費的資源。查詢遠端表的查詢或執行分布式連線的查詢會在network代價方面花費比較大。
[b]判斷當前資料庫使用何種優化器:[/b]
由optimizer_mode初始化引數決定的。該引數可能的取值為:first_rows_[1 | 10 | 100 | 1000] | first_rows | all_rows | choose | rule。
具體解釋如下:
rule為使用rbo優化器。
choose則是根據實際情況,如果資料字典中包含被引用的表的統計資料,即引用的物件已經被分析,則就使用cbo優化器,否則為rbo優化器。
all_rows為cbo優化器使用的第一種具體的優化方法,是以資料的吞吐量為主要目標,以便可以使用最少的資源完成語句。
first_rows為優化器使用的第二種具體的優化方法,是以資料的響應時間為主要目標,以便快速查詢出開始的幾行資料。
first_rows_[1 | 10 | 100 | 1000] 為優化器使用的第三種具體的優化方法,讓優化器選擇乙個能夠把響應時間減到最小的查詢執行計畫,以迅速產生查詢結果的前 n 行。該引數為oracle 9i新引入的。
Oracle認證 Oracle優化器的優化方式
oracle是世界領先的資訊管理軟體開發商,因其複雜的關聯式資料庫產品而聞名。本文介紹oracle優化器,它是乙個非常好用的工具。oracle在執行乙個sql之前,首先要分析一下語句的執行計畫,然後再按執行計畫去執行。分析語句的執行計畫的工作是由優化器 optimizer 來完成的。不同的情況,一條...
Oracle的優化器
一 目的 1 說一說oracle的optimizer及其相關的一些知識。2 回答一下為什麼有時乙個表的某個字段明明有索引,當觀察一些sql的執行計畫時,發現確不走索引的問題。3 如果你對 first rows all rows這兩種模式有疑惑時也可以看一下這篇文章。oracle在執行乙個sql之前,...
ORACLE的優化器
a.rule 基於規則 b.cost 基於成本 c.choose 選擇性 設定預設的優化器,可以通過對init.ora檔案中optimizer mode引數的各種宣告,如rule,cost,choose,all rows,first rows 你當然也在sql句級或是會話 session 級對其進行...