Oracle執行計劃查看

查詢過程介紹

當一個SQL查詢被執行時,Oracle查詢優化器(query optimizer)會快速計算分步執行計劃,詳細說明它將如何檢索查詢中指定的列值。在計算執行計劃時,優化器決定哪些表和索引用來檢索數據。
如果沒有索引存在,則表本身是可用於滿足查詢結果的唯一訪問路徑。Oralce別無選擇,只能檢查每一行數據檢查是否符合查詢條件(全表掃描-full table scan)。

數據準備

-- 創建一個客戶表存放客戶信息
create table cust
(cust_id number
,last_name varchar2(30)
,first_name varchar2(30)); 
-- 插入一條數據待查詢數據
insert into cust (cust_id, last_name, first_name) values(1, 'STARK','JIM'); 
-- 模擬插入100萬客戶信息
insert into cust
select rownum + 1
 ,dbms_random.string('U',dbms_random.value(3,15)) rand_last_name
 ,dbms_random.string('U',dbms_random.value(3,15)) rand_first_name
from xmltable('1 to 1000000'); 
# 創建索引
create index cust_idx1
on cust(last_name); 

查看計劃

查看執行計劃時,儘量先收集表的統計信息,否則計劃可能不準

-- 通過以下存儲過程收集表的統計信息
call dbms_stats.gather_table_stats( user, 'CUST' ); 

PL/SQL Developer Explain plan Window
PL/SQL Developer依次點擊File->new->Explain plan Window打開一個執行計劃窗口,在執行計劃窗口編寫需要查看執行計劃的SQL,然後按F8F5快捷鍵查看執行計劃(也可以點擊綠色執行按鈕)
在這裏插入圖片描述

PL/SQL Developer Command Window

PL/SQL Developer依次點擊File->new->Command Window打開一個命令窗口,在命令窗口中執行下面的SQL進行執行計劃查詢

-- 生成執行計劃
explain plan for
select cust_id, last_name, first_name
from cust
where last_name = 'STARK';
-- 查看執行計劃
select * from table(dbms_xplan.display(null,null,'BASIC +COST')); 

在這裏插入圖片描述

執行流程總結

  1. 用戶提交查詢請求
  2. 查詢將傳遞到Oracle服務器進程
  3. Oracle查詢優化器被調用. 它創建一個包括訪問索引的執行計劃。
  4. 訪問索引獲得相關數據行的ROWID
  5. 通過ROWID,定位到數據行所在的數據文件和塊
  6. 數據行返回到Oracle服務器進程
  7. Oracle服務器進程將結果返回給用戶
    在這裏插入圖片描述

參考:Expert Oracle Indexing and Access Paths

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章