1. 程式人生 > 實用技巧 >Dbeaver如何看Oralce執行計劃?解決: explain plan FOR 無效? 執行計劃的順序怎麼檢視?

Dbeaver如何看Oralce執行計劃?解決: explain plan FOR 無效? 執行計劃的順序怎麼檢視?

此文轉載自:https://blog.csdn.net/q258523454/article/details/112252826#commentBox

假如有如下表結構和資料

CREATE TABLE student
(
    id    number(10) PRIMARY KEY,
    name  varchar(10)                not NULL,
    name2 char(10) DEFAULT 'default' NOT NULL,
    age   number(4)
) tablespace TBS_CUR_DAT;

COMMENT ON COLUMN student.name IS '姓名';
COMMENT ON COLUMN student.name2 IS '姓名2';
COMMENT ON COLUMN student.age IS '年齡';


CREATE UNIQUE INDEX STUDENT_IDX_01 on STUDENT (id,name);
CREATE UNIQUE INDEX STUDENT_IDX_02 on STUDENT (age);
ID NAME NAME2 AGE
1 1      1     1
2 2      2     2
3 3      3     3
4 4      4     [NULL]

在dbeaver中用

explain plan FOR SELECT * from student;

檢視執行計劃,發現沒有任何反應(原因見後文)。

所以只能用工具來查看了,如何做呢?

注意上面可能因為版本問題出現的坑: 如果執行計劃沒有任何反應,先刪除“;”分號,重新加上然後再執行。

為什麼用下面的方法檢視不到執行計劃呢?

explain plan FOR SELECT * from student;

原因是我們還少了一條查詢SQL,上面只是生成執行計劃,但是不會主動顯示.

explain plan FOR SELECT * from student;
SELECT * FROM TABLE(dbms_xplan.display);

執行計劃如何看呢? 執行計劃的執行順序如何判斷?

答:樹的後續遍歷

假如執行計劃為:

--------------------------------------------------
| Id  | Operation                     | Name     |
--------------------------------------------------
|   0 | SELECT STATEMENT              |          |
|*  1 |  FILTER                       |          |
|   2 |   NESTED LOOPS                |          |
|   3 |    TABLE ACCESS FULL          | EMP      |
|   4 |    TABLE ACCESS BY INDEX ROWID| DEPT     |
|*  5 |     INDEX UNIQUE SCAN         | PK_DEPT  |
|*  6 |   TABLE ACCESS FULL           | SALGRADE |
--------------------------------------------------

畫圖:

同理,下面的執行順序為: