PL/SQL執行計划查看


一.如何查看PLSQL的執行計划

在SQl Window窗口輸入sql語句,然后按鍵"F5",就會進入執行計划查看界面。

二.界面說明

首先我們看第二行有幾個屬性可以選“Tree”、“HTML”、“Text”、“XML”。這幾個里面的核心數據是一樣的,不同的只是對核心數據的展示方式,分別為Tree、HTML、Text、XML。這個可以根據個人習慣來進行選擇。

再下面有幾個列屬性(每個人的列屬性可能會不同,這個是可以在PLSQL中進行配置)

我們首先看第一列的Description:下面的內容分別是我們這條SQL的執行步驟,縮進量最多的步驟最先執行,如果縮進量相同,則按照從上往下的順序執行。

Object owner:對象的所有者。

Object name:對象名稱。

Cost:成本花費。這里可以詳細地查看SQL執行的每一步的成本花費。

Time:執行時間。

三.如何優化SQL

1.查看SQL是全表掃描還是利用索引查詢。

假設有一張表t_srhs_jks,里面有1000萬條數據,我們在這張表中執行一條SQL:

我們可以看到根據條件dtnm=****查詢數據,由於DTNM字段不是索引,因此首先執行了"TABLE ACCESS FULL",即全表搜索,然后再執行上面的"SELECT STATEMENT, GOAL = ALL ROWS"查詢出所有數據行。

在這條SQL中的成本花費一共是14287(Cost=14287),執行時間是172(Time=172)。

然后我們對dtnm字段添加索引后再執行這條SQL:

相比第一次執行,這里的成本花費只有5385,執行時間只有65,減少了將近一倍。

 然后我們再來查看一下Description下的執行步驟:

(1)INDEX RANGE SCAN:索引范圍內查找。

(2)TABLE ACCESS BY INDEX ROWID:根據索引找到的ROWID來查找需要的數據。

(3)SELECT STATEMENT,GOAL = ALL ROWS:根據找到的數據,返回所有行。

關於索引的掃描類型:

1)index unique scan:索引唯一掃描。

  單列唯一索引:通過"="判斷條件時候才會使用,至多返回一條數據。

  多列唯一索引:所有的列都通過"="判斷條件時才會使用,且不能有任何一列的值被指定為null。

2)index range scan:索引范圍掃描。

  單列唯一索引:通過">"、"<"、">="、"<="、"between"等判斷條件時會被使用。

  多列唯一索引:全部或部分列(必須包含第一列,否則不會走這條索引)通過">"、"<"、">="、"<="、"between"等判斷條件時會被使用。部分列也可以在通過"="判斷條件時候被使用。

  普通索引:單列索引正常的條件判讀都會使用范圍掃描,多列的索引必須帶有第一列索引的條件判斷才會被使用范圍掃描。

3)index skip scan:索引跳躍掃描。

  只有當組合索引,且引導列(第一列)沒有被使用的情況下,可能會使用索引跳躍掃描。一般發生在引導列的distinct值很少的情況下。oracle幫我們改寫了sql語句,如select * from A where b=100,組合索引(a,b)中a的取值只有1和2時,sql會被改寫為select * from A where a = 1 and b = 100 union all select * from A where a = 2 and b = 100。 

4)index full scan:索引全掃描。

  這一個和索引快速掃描異曲同工。通常是在使用索引列進行count、sum等函數統計時候使用。

5)index fast full scan:索引快速掃描。

 

關於索引,有以下幾種情況時候不會被使用(只針對數據字段查詢,不包括count、sum等函數統計):

1)'%'被添加在參數前面。

 

2)帶'not'的條件,包括'<>'、'!='。

3)執行函數(函數索引除外。如果定義的是函數索引,即使使用函數仍然是可能會走索引。)

4)格式不正確(下圖的jksbh字段是vchar類型,令它與number類型比較,不會走索引。)

 

5)使用null判斷

 

記錄一下PLSQL12的一個注冊碼

PLSQL Developer 12 注冊碼
product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le 
serial Number:226959 
password: xs374ca


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM