Oracle 執行計劃詳解(F5)

優化器

2 種優化方式

  • CBO 優於 RBO,是因爲 RBO 是一種呆板、過時的優化器,它只認規則,對數據不敏感。畢竟規則是死的,數據是變化的。
優化方式 全稱 描述
RBO Rule-Based Optimization
基於規則的優化器
自 Oracle 6 以來被採用,一直沿用至 Oracle 9i,Oracle 10g 開始被棄用。
它有一套嚴格的使用規則:只要你按照它去寫SQL語句,無論數據表中的內容怎麼樣,也不會影響到你的 “執行計劃”
CBO Cost-Based Optimization
基於代價的優化器
自 Oracle 8 中開始引入,但到 Oracle 9i 中才逐漸成熟,在 Oracle 10g 中完全取代 RBO
CBO 是計算各種可能的 “執行計劃” 的 “代價(cost)”,從中選用 cost 最低的方案,作爲實際運行方案

4 種優化模式

  • 優化器模式包括:選擇、規則、第一行、所有行
優化模式 解釋
Choolse 默認(重點關注)
當一個表或索引有統計信息時,走 CBO 模式,反之走 RBO 模式
Rule 基於規則的方法,可忽略
First Rows 與 Choose 方式類似,當一個表有統計信息時,它將以最快的方式返回查詢的最先的幾行,從總體上減少了相應的時間,反之走 RBO 模式
All Rows 同 First Rows,當一個表有統計信息時,以最快的方式返回表的所有行,從總體上提高查詢的吞吐量,反之走 RBO 模式

表連接 / 訪問方式

表訪問方式 - 點擊跳轉可查看詳細

表的訪問方式 解釋
table access full(全表掃描)
table access by rowid(通過 rowid 掃描)
table access by index scan(索引掃描) index unique scan(索引唯一掃描)
index range scan(索引範圍掃描)
index full scan(索引全掃描).
index fast full scan(索引快速掃描)
index skip scan(索引跳躍掃描)

表連接方式詳解 - 點擊跳轉可查看詳細

表連接方式 工作原理 適用原則
nested loops 嵌套循環 2層嵌套循環 1.驅動表數據量 < 1W
2.被查找表有索引
hash join 散列連接 較小的表在 RAM 創建 hash table,較大的表讀取記錄,效率最高 1.等值連接
2. 驅動表大時,效果較好;驅動表小時,效果更好
3. 需要設置參數 HASH_AREA_SIZE
sort merge join 排序合併連接 記錄排序然後合併 1. 非等值連接或排序
star join 星型連接 多個維度表 和一個大的 數據表,然後嵌套循環連接 1.一般用於 數據倉庫
2. 需要啓用參數 STAR_TRANSFORMATION_ENABLED

F5 查看執行計劃

  • 工具:PL/SQL
  • 設置:工具 -> 首選項 -> 窗口類型 -> 計劃窗口
列字段 解釋
對象所有者(Object owner) 屬主
對象名稱(Object name) 對象名(表名、索引名等)
耗費(Cost) Oracle 估計的該步驟的執行成本,理論上越小越好
基數(Cardinality) Oracle 估計的當前操作的返回結果集行數
字節(Bytes) 執行該步驟後返回的字節數
訪問謂詞(Access predicates) 知道要什麼數據,也知道在哪裏,直接去取
一般有索引
過濾謂詞(Filter predicates) 先把數據取出來,再判斷是否滿足條件,不滿足就丟棄
一般沒有索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章