首页 > 数据库 > Oracle > oracle执行计划查看的几种方式
预估执行计划 :每执行一次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>
由于实际执行计划要在执行SQL时才会生成,查看执行计划前,要先执行SQL。 也是一个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'));
set auotrace traceonly
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23182478/viewspace-2969030/ ,如需转载,请注明出处,否则将追究法律责任。