Oracle的優化器

2021-08-31 17:37:13 字數 786 閱讀 3484

oracle的優化器共有兩種的優化方式,即基於規則的優化方式(rule-based optimization,簡稱為rbo)和基於代價的優化方式(cost-based optimization,簡稱為cbo)。 

a、rbo方式:優化器在分析sql語句時,所遵循的是oracle內部預定的一些規則。比如我們常見的,當乙個where子句中的一列有索引時去走索引。 

b、cbo方式:依詞義可知,它是看語句的代價(cost)了,這裡的代價主要指cpu和記憶體。優化器在判斷是否用這種方式時,主要參照的是表及索引的統計資訊。統計資訊給出表的大小 、有少行、每行的長度等資訊。這些統計資訊起初在庫內是沒有的,是你在做analyze後才出現的,很多的時侯過期統計資訊會令優化器做出乙個錯誤的執行計畫,因些我們應及時更新這些資訊。在oracle8及以後的版本,oracle列推薦用cbo的方式。 

為什麼有時乙個表的某個字段明明有索引,當觀察一些語的執行計畫確不走索引呢?如何解決呢 ? 

a、不走索引大體有以下幾個原因 

♀你在instance級別所用的是all_rows的方式 

♀你的表的統計資訊(最可能的原因) 

♀你的表很小,上文提到過的,oracle的優化器認為不值得走索引。 

b、解決方法 

♀可以修改init.ora中的optimizer_mode這個引數,把它改為rule或choose,重起資料庫。也可以使用4中所提的hint. 

♀刪除統計資訊 

sql>analyze table table_name delete statistics; 

♀錶小不走索引是對的,不用調的。 

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 級對其進行...