Oracle的執行計畫

2021-08-27 10:12:41 字數 1421 閱讀 6718

今天來詳細說說oracle的執行計畫,所謂執行計畫,就是在執行某條sql之前作出的執行方案,或者說是執行路徑。oracle的優化器模式有兩大類,乙個是基於規則的(rbo:

rule based optimizer

),乙個是基於代價的優化器(cbo:cost

based optimizer):

又可細分為:

choose, rule ,first_rows ,all_rows

choose方式表示,如果查詢的表存在統計資訊,則基於代價來執行(first_rows),否則使用基於規則的方式來執行這條sql,即rule。(ps:在10g中已經廢除了rbo)

先來理解幾個概念:(名詞解釋來自網路加上自己的理解)

行源(row source):返回符合條件的行的集合,或者多表關聯,或者是單錶查詢返回的行資料。

謂詞(predicate):說的直白些,就是查詢中的where條件

驅動表(driving table):又稱外層表,概念用於巢狀表與hash連線中,一般指的是經過謂詞條件過濾之後返回的行源較少的表。

被探查表(probed table

組合索引(c

oncatenated index

):多列組成的索引,一般需要有先導列索引才能生效。如emp表的索引有create index ... on emp(col1,col2,col3);

那麼先導列就是col1,要使用索引,需含有欄位col1,如where col1=..或where col1=.. and col2=...而,where col2=..則不走索引。

幾種訪問資料的方法:

1.全表掃瞄(

full table scan

):顧名思義,讀取表中所有的行,可以通過設定資料庫的

db_block_multiblock_read_count引數來設定多塊讀取以提高全表掃瞄的效率,一般查詢的資料超過表的5%-10%時,可以使用全表掃瞄。

2.rowid讀取資料(

table access by rowid )

3.索引讀取(index scan):索引已經排序過了的,所以如果通過索引查詢的值還進行了排序,這裡並不需要再次進行排序,提高了效率。索引掃瞄還分為:index unique scan,index range scan,index full scan,index fast full scan

表之間的連線經常涉及到以下幾種型別:

巢狀迴圈連線(外層表作為驅動,每一行對內層表進行高效訪問,所以一般驅動表的行源較小,內層表較大,但是可以通過索引高效訪問)

排序-合併連線(對關聯的兩個行源先分別根據連線列進行排序,然後再進行連線。因為需要排序所以這種方法一般都很浪費資源,但是如果需要連線的行源已經排完序了,那麼這種方法效率還是挺高的。用於非等值連線,關聯列都有索引的情況,)

雜湊連線(兩個較大的行源進行連線時,能夠有較好的效率,但是只可用於等值連線)

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...

oracle執行計畫

對於一條sql語句,oracle是如何執行的,首先必須發揮你的想象,你認為它會如何去實現。是等子查詢結果全出來之後,還是子查詢每齣乙個結果,都觸發父節點去執行。沒錯,單純的 資料瀏覽當然不用等子查詢全部結束後,但涉及到排序,求和等需求的時候,就必須要等了,你可以幫它想想,全部資料不出來的話,何談去排...

Oracle 執行計畫

總結 sqlplus 下的自動顯示功能,在看執行計畫中其語句還是會被執行的。尤其在執行update delete語句時請千萬注意,oracle是先執行指令碼同時顯示執行計畫的,即使使用set autotrace on traceonly explain 這個時候推薦使用explain plan fo...