EXPLAIN PLAN分析效能EXPLAIN PLAN FOR 是 Oracle 中用來獲取 SQL 執行效能的語法,EXPLAIN PLAN 生成的執行計劃會存在 Oracle 中,可再使用DBMS_XPLAN.DISPLAY讀取SQL查詢語言產生的CPU使用時間。
Example
假設你有如下查詢,並想要查看其執行計劃:
-- create
CREATE TABLE Student (
  ID NUMBER PRIMARY KEY,
  name VARCHAR2(15) NOT NULL,
  Subject VARCHAR2(10) NOT NULL,
  Score VARCHAR2(10) NOT NULL
);
-- insert
INSERT INTO Student VALUES (1, 'Amy', 'Eng', 74);
INSERT INTO Student VALUES (2, 'Peter', 'Eng', 50);
CREATE TABLE PHONE (
  name VARCHAR2(15) NOT NULL,
  phone VARCHAR2(15) NOT NULL
);
-- insert
INSERT INTO PHONE VALUES ('Amy', '0956258956');
INSERT INTO PHONE VALUES ('Peter', '0974859359');
INSERT INTO PHONE VALUES ('Amy', '02-5689574');
-- 生成的執行計劃
EXPLAIN PLAN FOR
select s.*
  , (select phone from Phone P where P.name = S.name and rownum<=1) phone
from student s
where s.subject = 'Eng'
;
-- 查詢執行計劃
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
輸出如下:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | 
|---|---|---|---|---|---|---|
| 0 | SELECT STATEMENT | 2 | 72 | 6 (0) | 00:00:01 | |
| 1 | COUNT STOPKEY | |||||
| 2 | TABLE ACCESS FULL | PHONE | 1 | 18 | 3 (0) | 00:00:01 | 
| 3 | TABLE ACCESS FULL | STUDENT | 2 | 72 | 3 (0) | 00:00:01 | 
解釋:
Id: 操作順序Operation: 執行的操作,如 TABLE ACCESS FULL 表示全表掃描Name: 資料庫名稱Rows: 處理行數Bytes: 處理的字元數Cost: 估計影響CPU%Time: 預計執行時間【Reference】