Oracle SQL语句分析Explain Plan

2014-11-24 18:22:22 · 作者: · 浏览: 0

你需要按照从里到外,从上到下的次序解读分析的结果. EXPLAIN PLAN 分析的结果是用缩进的格式排列的, 最内部的操作将被最先解读, 如果两个操作处于同一层中,带有最小操作号的将被首先执行.


1,安装


以sys用户执行创建脚本,脚本位于$ORACLE_HOME/rdbms/admin/utlxplan.sql。


执行的方法,cp $ORACLE_HOME/rdbms/admin/utlxplan.sql /home/utlxplan.sql


进入数据库中执行:@/home/utlxplan.sql


执行完之后,数据库中会有个plan的表,用来存储分析的信息。


2,使用


语法:


explain PLAN [ SET STATEMENT_ID [=] < string literal > ] [ INTO < table_name > ]


FOR < sql_statement >


其中:


STATEMENT_ID:是一个唯一的字符串,把当前执行计划与存储在同一PLAN中的其它执行计划区别开来。


TABLE_NAME:是plan表名,它结构如前所示,你可以任意设定这个名称。


SQL_STATEMENT:是真正的要分析的SQL语句


例如:


explain plan set statement_id='T_TEST' for select * from t;


分析:


SQL>SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID


2 FROM PLAN_TABLE a


3 WHERE STATEMENT_ID='T_TEST'


4 ORDER BY Id;


grant all on plan_table to public;#授权所有用户


为了在sql*plus中使用autotrace。需要执行一下操作:


要在数据库中建立一个角色plustrace,用sys用户运行脚本plustrce.sql来创建这个角色,这个脚本在目录 (UNIX:$ORACLE_HOME/sqlplus/admin, Windows:%ORACLE_HOME%/sqlplus/admin)中;


方法通ultxplain.sql一样。


授权:将plustrace的权限授予需要autotrace的用户


grant plustruce to public;


启动关闭autotrace:


set autotrace on/off;


只显示执行计划


set autotrace on explain;


只显示统计信息:


set autotrace on statistics;


显示执行计划,屏蔽执行结果;


set autotrace on traceonly;


仅仅显示执行计划,屏蔽执行结果:


set autotrace on traceonly explain;