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】