oracle sql语句分析explain explan

来源:互联网 发布:水牛城66 知乎 编辑:程序博客网 时间:2024/05/16 00:42

EXPLAIN PLAN 是一个很好的分析SQL 语句的工具,它甚至可以在不执行SQL 的情况下分

析语句. 通过分析,我们就可以知道ORACLE 是怎么样连接表,使用什么方式扫描表(索引扫描或全

表扫描)以及使用到的索引名称.

你需要按照从里到外,从上到下的次序解读分析的结果. 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;