oracle执行计划查看的几种方式

来源:这里教程网 时间:2026-03-03 18:52:24 作者:

oracle执行计划查看的几种方式

1生成执行计划

预估执行计划 :每执行一次EXPLAIN PLAN,DB优化器(Optimizer)就会生成执行计划* 而不执行SQL * (因此叫“预估”),并写入PLAN_TABLE表中(Oracle默认使用PLAN_TABLE临时表来保存EXPLAIN PLAN的结果):




EXPLAIN PLAN

   SET STATEMENT_ID = 'statement1'  --指定该条语句的statement_id,后续可用于查询PLAN_TABLE表中的执行计划

   INTO my_plan_table               --可以不使用默认的PLAN_TABLE而使用自定义表

FOR

SELECT last_name FROM employees;    --要分析的SQL语句。INSERT, UPDATE, SELECT和DELETE语句。

简单的使用

SYS@EMREP> explain plan for  select * from t1;




Explained.




SYS@EMREP>  select * from table(dbms_xplan.display);




PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3617692013




--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |     1 |  2028 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS FULL| T1   |     1 |  2028 |     2   (0)| 00:00:01 |

--------------------------------------------------------------------------




Note

-----

   - dynamic sampling used for this statement (level=2)




12 rows selected.




SYS@EMREP> 

2 查询执行计划

由于实际执行计划要在执行SQL时才会生成,查看执行计划前,要先执行SQL。 DBMS_XPLAN.DISPLAY_CURSOR 也是一个Oracle自带的函数(点击链接查看详情),它可以展示已经加载到cache中的执行计划:

--不带选项,直接查询最后一条SQL的执行计划

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());




--指定了sql_id和child_number,查询指定SQL的执行计划。

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));




-----------------------------------------------------------




--1.为了区别其他的SQL,需要在执行SQL的时候加入特殊标记的注释,比如:

SELECT /* TOTO */ ename, dname FROM dept d join emp e USING (deptno);




--2.通过SQL标记,查到sql_id和child_number。v$sql是一个系统视图,保存执行过的sql语句

SELECT sql_id, child_number FROM v$sql WHERE sql_text LIKE '%TOTO%';




SQL_ID         CHILD_NUMBER

----------     -----------------------------

gwp663cqh5qbf   0




--3.再查询该SQL的执行计划

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));







 select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

   

3 sqlplus 配置自动查看

查看执行计划(不执行)

set auotrace traceonly

自动显示执行计划(执行后)

set autotrace on

相关推荐