oracle 执行计划 一 执行计划的查看方式

执行计划在数据库sql调优有着举重轻足的效果,通过查看sql执行方式可知道该语句执行消耗的cost。首先介绍下执行计划的查看方式。

一.在线查看执行计划表
1.explain plan forselect * from ......
2.select * from table(DBMS_XPLAN.Display);

或者

      1 SQL>explain plan set statement_id=‘T_TEST‘ for select * from t_test
       2SQL>SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID
FROM PLAN_TABLE a WHERE STATEMENT_ID=‘T_TEST‘ ORDER BY Id;

oracle第三方工具使用这个原理

plsql developer(F5)  Toad (Ctrl+E)

备注:通过F5查看到的执行计划,其实是pl/sql developer工具内部执行查询 plan_table表然后格式化的结果。只能用作分析,和实际运行的计划还是有差别的。

二.2 、通过AUTOTRACE

AUTOTRACE的使用方法
2.1、安装
用sys用户运行脚本ultxplan.sql
建立这个表的脚本是:(UNIX:$ORACLE_HOME/rdbms/admin, Windows:%ORACLE_HOME%\rdbms\admin)ultxplan.sql。
SQL> connect sys/sys@colm2 as sysdba;
SQL> @C:\oracle\ora92\rdbms\admin\utlxplan.sql;
SQL> create public synonym plan_table for plan_table;--建立同义词
SQL> grant all on plan_table to public;--授权所有用户
要在数据库中建立一个角色plustrace,用sys用户运行脚本plustrce.sql来创建这个角色,这个脚本在目录(UNIX:$ORACLE_HOME/sqlplus/admin, Windows:%ORACLE_HOME%\sqlplus\admin)中;
SQL> @C:\oracle\ora92\sqlplus\admin\plustrce.sql;
然后将角色plustrace授予需要autotrace的用户;
SQL>grant plustrace to public;
经过以上步骤的设置,就可以在sql*plus中使用autotrace了
2、2 使用
使用起来非常方便,只要使用一条命令就可以了
SQL>SET AUTOTRACE ON;
*autotrace功能只能在SQL*PLUS里使用
其他一些使用方法:
2.2.1、在SQLPLUS中得到语句总的执行时间
SQL> set timing on;
2.2.2、只显示执行计划--(会同时执行语句得到结果)
SQL>set autotrace on explain
比如:
sql> select count(*) from test;
count(*)
-------------
4
Execution plan
----------------------------
0 select statement ptimitzer=choose (cost=3 card=1)
1 0 sort(aggregate)
2 1 partition range(all)
3 2 table access (full) of ‘t_test‘ (cost=3 card=900)
2.2.3、只显示统计信息---(会同时执行语句得到结果)
SQL>set autotrace on statistics;
(备注:对于SYS用户,统计信息将会是0)
2.2.4、显示执行计划,屏蔽执行结果--(但语句实质还执行的
SQL> set autotrace on traceonly; 
(备注:同SET AUTOTRACE ON; 只不过不显示结果,显示计划和统计)
2.2.5、仅仅显示执行计划,屏蔽其他一切结果--(语句还是执行了)
SQL>set autotrace on traceonly explain;
对于仅仅查看大表的Explain Plan非常管用。
2.2.6、关闭
SQL>set autotrace off;
总结:SQLPLUS 下的自动显示功能,在看执行计划中其语句还是会被执行的。

实验:

SQL> select count(*) from a;

  COUNT(*)
----------
        27
SQL> set autotrace trace exp
SQL> select count(*) from a;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF ‘A‘

SQL> insert into a values(1,‘a‘,null,null);

已创建1行

Execution Plan
----------------------------------------------------------
   0      INSERT STATEMENT Optimizer=CHOOSE

SQL> set autotrace off;
SQL> select count(*) from a;

  COUNT(*)
----------
        28
结果:

如果是trace exp,查询不执行,但dml会执行,

如果是trace ,查询也一样会执行。

现在一般用第一种。

 

 

oracle 执行计划 一 执行计划的查看方式,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。