ITPub博客

首页 > 数据库 > Oracle > 使用 DBMS_XPLAN 查看执行计划

使用 DBMS_XPLAN 查看执行计划

Oracle 作者:hunanliuweidong 时间:2016-05-06 22:11:27 0 删除 编辑
<span style="color:#000000;">SQL 优化的第一步,是查看 SQL 的执行计划。今天我们来说说查看执行计划的常用的一种方式 :使用DBMS_XPLAN </span><br /> <br /> <span style="color:#000000;">如果PLan_table&nbsp; 不存在。可以通过下面脚本创建:</span><br /> <span style="color:#000000;">conn sys/password as sysdba</span><br /> <span style="color:#000000;">@$ORACLE_HOME/rdbms/admin/utlxplan.sql</span><br /> <span style="color:#000000;">CREATE PUBLIC SYNONYM plan_table FOR sys.plan_table;</span><br /> <span style="color:#000000;">GRANT ALL ON sys.plan_table TO public;</span><br /> <br /> <span style="color:#000000;">1. DISPLAY</span><span class="Apple-converted-space"><span style="color:#000000;"> 函数 </span><br /> <span style="color:#000000;">SQL&gt; CONN scott/tiger</span><br /> <span style="color:#000000;">Connected.</span><br /> <span style="color:#000000;">SQL&gt; </span><br /> <span style="color:#000000;">SQL&gt; EXPLAIN PLAN FOR</span><br /> <span style="color:#000000;">&nbsp; 2&nbsp; SELECT *</span><br /> <span style="color:#000000;">&nbsp; 3&nbsp; FROM&nbsp;&nbsp; emp e, dept d</span><br /> <span style="color:#000000;">&nbsp; 4&nbsp; WHERE&nbsp; e.deptno = d.deptno</span><br /> <span style="color:#000000;">&nbsp; 5&nbsp; AND&nbsp;&nbsp;&nbsp; e.ename&nbsp; = 'SMITH';</span><br /> <br /> <span style="color:#000000;">Explained.</span><br /> <br /> <span style="color:#000000;">SQL&gt; SET LINESIZE 130</span><br /> <span style="color:#000000;">SQL&gt; SET PAGESIZE 20</span><br /> <span style="color:#000000;">SQL&gt; SELECT *&nbsp; FROM&nbsp;&nbsp; TABLE(DBMS_XPLAN.DISPLAY);</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">Plan hash value: 3625962092</span><br /> <br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">| Id&nbsp; | Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Name&nbsp;&nbsp;&nbsp; | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 0 | SELECT STATEMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 58 |&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 1 |&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 2 |&nbsp;&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 58 |&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 3 |&nbsp;&nbsp;&nbsp; TABLE ACCESS FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EMP&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 38 |&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 4 |&nbsp;&nbsp;&nbsp; INDEX UNIQUE SCAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | PK_DEPT |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 5 |&nbsp;&nbsp; TABLE ACCESS BY INDEX ROWID| DEPT&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 20 |&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">Predicate Information (identified by operation id):</span><br /> <span style="color:#000000;">---------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - filter("E"."ENAME"='SMITH')</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - access("E"."DEPTNO"="D"."DEPTNO")</span><br /> <br /> <span style="color:#000000;">18 rows selected.</span><br /> <br /> <span style="color:#000000;">DBMS_XPLAN.DISPLAY 函数可以接受3个可选参数.</span><br /> <span style="color:#000000;">table_name 表名,默认是 'PLAN_TABLE'。</span><br /> <span style="color:#000000;">statement_id 要显示的ID&nbsp; 默认为空 NULL,表示最近在PLAN_TABLE的执行计划。</span><br /> <span style="color:#000000;">format&nbsp; 控制要输出的格式, 默认为 'TYPICAL'.&nbsp; 其他的值有 'BASIC', 'ALL', 'SERIAL'.&nbsp; 'ADVANCED' 。</span><span style="color:#000000;font-family:&quot;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:22.8571px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline ! important;float:none;"><span class="Apple-converted-space"><br /> <br /> <span style="color:#000000;">SQL&gt; EXPLAIN PLAN SET STATEMENT_ID='LS' FOR</span><br /> <span style="color:#000000;">&nbsp; 2&nbsp; SELECT *</span><br /> <span style="color:#000000;">&nbsp; 3&nbsp; FROM&nbsp;&nbsp; emp e, dept d</span><br /> <span style="color:#000000;">&nbsp; 4&nbsp; WHERE&nbsp; e.deptno = d.deptno</span><br /> <span style="color:#000000;">&nbsp; 5&nbsp; AND&nbsp;&nbsp;&nbsp; e.ename&nbsp; = 'SMITH';</span><br /> <br /> <span style="color:#000000;">Explained.</span><br /> <br /> <span style="color:#000000;">SQL&gt; SELECT *&nbsp; FROM&nbsp;&nbsp; TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','LS','BASIC'));</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">Plan hash value: 3625962092</span><br /> <br /> <span style="color:#000000;">------------------------------------------------</span><br /> <span style="color:#000000;">| Id&nbsp; | Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Name&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">------------------------------------------------</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 0 | SELECT STATEMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 1 |&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 2 |&nbsp;&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 3 |&nbsp;&nbsp;&nbsp; TABLE ACCESS FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EMP&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 4 |&nbsp;&nbsp;&nbsp; INDEX UNIQUE SCAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | PK_DEPT |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 5 |&nbsp;&nbsp; TABLE ACCESS BY INDEX ROWID| DEPT&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">------------------------------------------------</span><br /> <br /> <span style="color:#000000;">12 rows selected.</span><br /> <br /> <span style="color:#000000;">SQL&gt; SELECT *&nbsp; FROM&nbsp;&nbsp; TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','LS','ADVANCED'));</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">Plan hash value: 3625962092</span><br /> <br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">| Id&nbsp; | Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Name&nbsp;&nbsp;&nbsp; | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 0 | SELECT STATEMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 58 |&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 1 |&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 2 |&nbsp;&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 58 |&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 3 |&nbsp;&nbsp;&nbsp; TABLE ACCESS FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EMP&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 38 |&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 4 |&nbsp;&nbsp;&nbsp; INDEX UNIQUE SCAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | PK_DEPT |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 5 |&nbsp;&nbsp; TABLE ACCESS BY INDEX ROWID| DEPT&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 20 |&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">Query Block Name / Object Alias (identified by operation id):</span><br /> <span style="color:#000000;">-------------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 1 - SEL$1</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - SEL$1 / E@SEL$1</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - SEL$1 / D@SEL$1</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 5 - SEL$1 / D@SEL$1</span><br /> <br /> <span style="color:#000000;">Outline Data</span><br /> <span style="color:#000000;">-------------</span><br /> <br /> <span style="color:#000000;">&nbsp; /*+</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN_OUTLINE_DATA</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NLJ_BATCHING(@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USE_NL(@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEADING(@"SEL$1" "E"@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL(@"SEL$1" "E"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUTLINE_LEAF(@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL_ROWS</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DB_VERSION('11.2.0.1')</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OPTIMIZER_FEATURES_ENABLE('11.2.0.1')</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IGNORE_OPTIM_EMBEDDED_HINTS</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END_OUTLINE_DATA</span><br /> <span style="color:#000000;">&nbsp; */</span><br /> <br /> <span style="color:#000000;">Predicate Information (identified by operation id):</span><br /> <span style="color:#000000;">---------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - filter("E"."ENAME"='SMITH')</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - access("E"."DEPTNO"="D"."DEPTNO")</span><br /> <br /> <span style="color:#000000;">Column Projection Information (identified by operation id):</span><br /> <span style="color:#000000;">-----------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 1 - (#keys=0) "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."JOB"[VARCHAR2,9], "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."SAL"[NUMBER,22], "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22],</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "D"."DEPTNO"[NUMBER,22], "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 2 - (#keys=0) "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."JOB"[VARCHAR2,9], "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."SAL"[NUMBER,22], "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "D".ROWID[ROWID,10], "D"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10], "E"."JOB"[VARCHAR2,9],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7], "E"."SAL"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - "D".ROWID[ROWID,10], "D"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 5 - "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]</span><br /> <br /> <span style="color:#000000;">61 rows selected.</span><br /> </span></span><br /> <span style="color:#000000;">ORACLE 10G 之后,oracle 引入了 DISPLAY_CURSOR 这个函数。</span><span style="color:#000000;" class="Apple-converted-space">DISPLAY_CURSOR</span><span style="color:#000000;">函数并不是从</span><span style="color:#000000;" class="Apple-converted-space">PLAN_TABLE</span><span style="color:#000000;"> 返回记录。而是从游标缓存获取数据。</span><br /> <span style="color:#000000;"></span><code><span style="color:#000000;">这些数据来自于</span></code><code style="box-sizing:border-box;font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:14px;padding:2px 4px;color:#000000;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:auto;text-align:start;text-indent:0px;text-transform:none;white-space:normal;widows:auto;word-spacing:0px;-webkit-text-stroke-width:0px;background-color:#FFFFFF;"><span style="color:#000000;">V$SQL_PLAN_STATISTICS_ALL</span></code><span style="color:#000000;font-family:&quot;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:22.8571px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline ! important;float:none;"><span style="color:#000000;">,</span><span style="color:#000000;" class="Apple-converted-space">&nbsp;</span></span><code style="box-sizing:border-box;font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:14px;padding:2px 4px;color:#000000;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:auto;text-align:start;text-indent:0px;text-transform:none;white-space:normal;widows:auto;word-spacing:0px;-webkit-text-stroke-width:0px;background-color:#FFFFFF;"><span style="color:#000000;">V$SQL</span></code><span style="color:#000000;font-family:&quot;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:22.8571px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline ! important;float:none;"><span class="Apple-converted-space"> <code><span style="color:#000000;">和</span></code></span></span><code style="box-sizing:border-box;font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;font-size:14px;padding:2px 4px;color:#000000;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:auto;text-align:start;text-indent:0px;text-transform:none;white-space:normal;widows:auto;word-spacing:0px;-webkit-text-stroke-width:0px;background-color:#FFFFFF;"><span style="color:#000000;">V$SQL_PLAN。</span><br /> <span style="color:#000000;"></span><span style="color:#000000;">所以用</span><span style="color:#000000;" class="Apple-converted-space">DISPLAY_CURSOR</span><span style="color:#000000;"> 看到的执行计划是实际执行过的执行计划,是真实的。</span><br /> <span style="color:#000000;"></span></code><br /> <span style="color:#000000;">SQL&gt; set linesize 300</span><br /> <span style="color:#000000;">SQL&gt; set pagesize 300</span><br /> <span style="color:#000000;">SQL&gt; SELECT * FROM&nbsp;&nbsp; emp e, dept d</span><br /> <span style="color:#000000;">&nbsp; 2&nbsp; WHERE&nbsp; e.deptno = d.deptno</span><br /> <span style="color:#000000;">&nbsp; 3&nbsp; AND&nbsp;&nbsp;&nbsp; e.ename&nbsp; = 'SMITH';</span><br /> <br /> <br /> <span style="color:#000000;">SQL&gt; SELECT *&nbsp; FROM&nbsp;&nbsp; TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format =&gt; 'ADVANCED'));</span><br /> <br /> <span style="color:#000000;">PLAN_TABLE_OUTPUT</span><br /> <span style="color:#000000;">------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">SQL_ID&nbsp; az3q3dcu2tzzx, child number 0</span><br /> <span style="color:#000000;">-------------------------------------</span><br /> <span style="color:#000000;">SELECT * FROM&nbsp;&nbsp; emp e, dept d WHERE&nbsp; e.deptno = d.deptno AND&nbsp;&nbsp;&nbsp; e.ename</span><br /> <span style="color:#000000;">&nbsp;= 'SMITH'</span><br /> <br /> <span style="color:#000000;">Plan hash value: 3625962092</span><br /> <br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">| Id&nbsp; | Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Name&nbsp;&nbsp;&nbsp; | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 0 | SELECT STATEMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 4 (100)|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 1 |&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 2 |&nbsp;&nbsp; NESTED LOOPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 58 |&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 3 |&nbsp;&nbsp;&nbsp; TABLE ACCESS FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | EMP&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 38 |&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">|*&nbsp; 4 |&nbsp;&nbsp;&nbsp; INDEX UNIQUE SCAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | PK_DEPT |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; (0)|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br /> <span style="color:#000000;">|&nbsp;&nbsp; 5 |&nbsp;&nbsp; TABLE ACCESS BY INDEX ROWID| DEPT&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 20 |&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; (0)| 00:00:01 |</span><br /> <span style="color:#000000;">----------------------------------------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">Query Block Name / Object Alias (identified by operation id):</span><br /> <span style="color:#000000;">-------------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 1 - SEL$1</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - SEL$1 / E@SEL$1</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - SEL$1 / D@SEL$1</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 5 - SEL$1 / D@SEL$1</span><br /> <br /> <span style="color:#000000;">Outline Data</span><br /> <span style="color:#000000;">-------------</span><br /> <br /> <span style="color:#000000;">&nbsp; /*+</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN_OUTLINE_DATA</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IGNORE_OPTIM_EMBEDDED_HINTS</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OPTIMIZER_FEATURES_ENABLE('11.2.0.1')</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DB_VERSION('11.2.0.1')</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL_ROWS</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUTLINE_LEAF(@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL(@"SEL$1" "E"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEADING(@"SEL$1" "E"@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USE_NL(@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NLJ_BATCHING(@"SEL$1" "D"@"SEL$1")</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END_OUTLINE_DATA</span><br /> <span style="color:#000000;">&nbsp; */</span><br /> <br /> <span style="color:#000000;">Predicate Information (identified by operation id):</span><br /> <span style="color:#000000;">---------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - filter("E"."ENAME"='SMITH')</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - access("E"."DEPTNO"="D"."DEPTNO")</span><br /> <br /> <span style="color:#000000;">Column Projection Information (identified by operation id):</span><br /> <span style="color:#000000;">-----------------------------------------------------------</span><br /> <br /> <span style="color:#000000;">&nbsp;&nbsp; 1 - "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10], "E"."JOB"[VARCHAR2,9],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7], "E"."SAL"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22], "D"."DEPTNO"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 2 - "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10], "E"."JOB"[VARCHAR2,9],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7], "E"."SAL"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22], "D".ROWID[ROWID,10],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "D"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 3 - "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10], "E"."JOB"[VARCHAR2,9],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7], "E"."SAL"[NUMBER,22],</span><br /> <span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 4 - "D".ROWID[ROWID,10], "D"."DEPTNO"[NUMBER,22]</span><br /> <span style="color:#000000;">&nbsp;&nbsp; 5 - "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]</span><br /> <br /> <br /> <span style="color:#000000;">67 rows selected.</span><br /> <br /> <span style="color:#000000;">还有几个函数包大家自行实验</span><span style="color:#000000;">:</span><br /> <span style="color:#000000;">&nbsp;DISPLAY_AWR</span><br /> <span style="color:#000000;">&nbsp;DISPLAY_SQLSET</span><br /> <span style="color:#000000;">&nbsp;DISPLAY_SQL_PLAN_BASELINE</span><br /> <span style="color:#000000;">&nbsp;DISPLAY_PLAN </span><br /> <br /> <span style="color:#000000;"></span><br /> <span style="color:#000000;"></span><br /> </span>

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25444422/viewspace-2095130/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle 表连接
请登录后发表评论 登录
全部评论

注册时间:2016-04-06

  • 博文量
    98
  • 访问量
    175956