查询sql语句的执行计划

碰到很多朋友再问SQL语句优化的问题,发现比较多的人不会查看SQL语句的执行计划, 
在此开贴   简单介绍   
                                    如何分析SQL语句 
        很多时候,我们不太清楚自己写的SQL语句好还是不好,往往数据量一大,程序运行变慢。其实在SQL/PLUS里可以很清晰的分析出SQL语句的执行计划,它可以提醒我们来创建索引或改变SQL语句的写法。 

        先在sys用户下运行@/ORACLE_HOME/sqlplus/admin/plustrce.sql 

内容: 
set   echo   on 
drop   role   plustrace; 
create   role   plustrace; 
grant   select   on   v_$sesstat   to   plustrace; 
grant   select   on   v_$statname   to   plustrace; 
grant   select   on   v_$session   to   plustrace; 
grant   plustrace   to   dba   with   admin   option; 
set   echo   off 

产生plustrace角色,然后在sys用户下把此角色赋予一般用户&username 

SQL>   grant   plustrace   to   &username; 

        然后找到/ORACLE_HOME/rdbms/admin/utlxplan.sql,然后在当前用户SQL> 下运行,它创建一个plan_table,用来存储分析SQL语句的结果。 

create   table   PLAN_TABLE   ( 
statement_id         varchar2(30), 
timestamp               date, 
remarks                   varchar2(80), 
operation               varchar2(30), 
options                   varchar2(30), 
object_node           varchar2(128), 
object_owner         varchar2(30), 
object_name           varchar2(30), 
object_instance   numeric, 
object_type           varchar2(30), 
optimizer               varchar2(255), 
search_columns     number, 
id                             numeric, 
parent_id               numeric, 
position                 numeric, 
cost                         numeric, 
cardinality           numeric, 
bytes                       numeric, 
other_tag               varchar2(255), 
partition_start   varchar2(255), 
partition_stop     varchar2(255), 
partition_id         numeric, 
other                       long, 
distribution         varchar2(30)); 

        在SQL/PLUS的窗口运行以下命令 


set   time   on; (说明:打开时间显示) 
set   autotrace   on; (说明:打开自动分析统计,并显示SQL语句的运行结果) 
set   autotrace   traceonly; (说明:打开自动分析统计,不显示SQL语句的运行结果) 

        接下来你就运行测试SQL语句,看到其分析统计结果了。一般来讲,我们的SQL语句应该避免对大表的全表扫描。 

        关闭以上功能,在SQL/PLUS的窗口运行以下命令 

set   time   off; (说明:关闭时间显示) 
set   autotrace   off; (说明:关闭自动分析统计) 

---for   example: 
  我已有用户IFSAPP想在此用户下查看执行计划 
--创建角色 
ifsapp@PRACTICE> conn   sys/practice   as   sysdba; 
已连接。 

ifsapp@PRACTICE> @e:\oracle\ora92\sqlplus\admin\plustrce.sql 
ifsapp@PRACTICE> 
ifsapp@PRACTICE> drop   role   plustrace; 
drop   role   plustrace 
                    * 
ERROR   位于第   1   行: 
ORA-01919:   角色 'PLUSTRACE '不存在 


ifsapp@PRACTICE> create   role   plustrace; 

角色已创建 

ifsapp@PRACTICE> 
ifsapp@PRACTICE> grant   select   on   v_$sesstat   to   plustrace; 

授权成功。 

ifsapp@PRACTICE> grant   select   on   v_$statname   to   plustrace; 

授权成功。 

ifsapp@PRACTICE> grant   select   on   v_$session   to   plustrace; 

授权成功。 

ifsapp@PRACTICE> grant   plustrace   to   dba   with   admin   option; 

授权成功。 

ifsapp@PRACTICE> 
ifsapp@PRACTICE> set   echo   off 
ifsapp@PRACTICE> grant   plustrace   to   ifsapp; 

授权成功。 

ifsapp@PRACTICE> conn   ifsapp/ifsapp; 
已连接。 

--创建当前用户下的PLAN_TABLE 
ifsapp@PRACTICE> @e:\oracle\ora92\rdbms\admin\utlxplan.sql 

表已创建。 

ifsapp@PRACTICE> set   autotrace   on 
ifsapp@PRACTICE> select   *   from   PLAN_TABLE; 

未选定行 


--以下就是执行计划的内容:) 

Execution   Plan 
---------------------------------------------------------- 
      0             SELECT   STATEMENT   Optimizer=CHOOSE 
      1         0       TABLE   ACCESS   (FULL)   OF   'PLAN_TABLE ' 


Statistics 
---------------------------------------------------------- 
                    0     recursive   calls 
                    0     db   block   gets 
                    3     consistent   gets 
                    0     physical   reads 
                    0     redo   size 
              1970     bytes   sent   via   SQL*Net   to   client 
                503     bytes   received   via   SQL*Net   from   client 
                    2     SQL*Net   roundtrips   to/from   client 
                    0     sorts   (memory) 
                    0     sorts   (disk) 
                    0     rows   processed 
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(912) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值