打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
通过分析SQL语句的执行计划优化SQL(三)第五章ORACLE的执行计划2
5.5如何产生执行计划
       5.6如何分析执行计划

5.5如何产生执行计划

要为一个语句生成执行计划,可以有3种方法:
1).最简单的办法

Sql> set autotrace on
Sql> select * from dual;
执行完语句后,会显示explain plan 与 统计信息。
这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。

如果想得到执行计划,而不想看到语句产生的数据,可以采用:
Sql> set autotrace traceonly
这样还是会执行语句。它比set autotrace on的优点是:不会显示出查询的数据,但是还是会将数据输出到客户端,这样当语句查询的数据比较多时,语句执行将会花费大量的时间,因为很大部分时间用在将数据从数据库传到客户端上了。我一般不用这种方法。

Sql> set autotrace traceonly explain
如同用explain plan命令。对于select 语句,不会执行select语句,而只是产生执行计划。但是对于dml语句,还是会执行语句,不同版本的数据库可能会有小的差别。这样在优化执行时间较长的select语句时,大大减少了优化时间,解决了“set autotrace on”与“set autotrace traceonly”命令优化时执行时间长的问题,但同时带来的问题是:不会产生Statistics数据,而通过tatistics数据的物理I/O的次数,我们可以简单的判断语句执行效率的优劣。


如果执行该语句时遇到错误,解决方法为:
(1)在要分析的用户下:
Sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) 用sys用户登陆
Sqlplus > @ ?\sqlplus\admin\plustrce.sql
Sqlplus > grant plustrace to user_name;   - - user_name是上面所说的分析用户

2).用explain plan命令
(1) sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) sqlplus > explain plan set statement_id =’???’ for select ………………
注意,用此方法时,并不执行sql语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。所以该语句比起set autotrace traceonly可用性要差。需要用下面的命令格式化输出,所以这种方式我用的不多:

set linesize 150
set pagesize 500
col PLANLINE for a120
SELECT EXECORD EXEC_ORDER, PLANLINE
   FROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RID
       FROM (SELECT PLANLINE, ID, RID, LEV
             FROM (SELECT lpad('' '',2*(LEVEL),rpad('' '',80,''     ''))||
                        OPERATION||''   ''||                 -- Operation
                        DECODE(OPTIONS,NULL,'''',

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
ORACLE EXPLAIN PLAN的总结
sqlplus的autotrace开关
oracle性能优化
Oracle10g里sql语句的执行计划
ORACLE AUTOTRACE介绍
获取、阅读执行计划
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服