• 怎样查看执行计划


    在pl/sql developer中,直接写条sql 选中,按F5,就可以调出执行计划,

    但在只有sql plus的情况下,只能用下面这个语句了,
    explain plan for select  * from nn_application;
    然后再来一句
    select * from table(dbms_xplan.display());
    就会出现一个类似下面的信息
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------

    ----------------------------------------------------------------------------
    | Id  | Operation                    |  Name       | Rows  | Bytes | Cost  |
    ----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |             |       |       |       |
    |   1 |  NESTED LOOPS                |             |       |       |       |
    |   2 |   TABLE ACCESS FULL          | AC01        |       |       |       |
    |   3 |   TABLE ACCESS BY INDEX ROWID| AB01        |       |       |       |
    |   4 |    INDEX UNIQUE SCAN         | PK_AB01     |       |       |       |
    ----------------------------------------------------------------------------


    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Note: rule based optimization, PLAN_TABLE' is old version

    就能看到执行计划了。

    如何分析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  

  • 相关阅读:
    转:客制FORM调用会计科目弹性域/根据科目取得CODE_COMBINATION_ID
    设计模式——“signleton”
    javascript部分知识点
    Java多线程初学者指南(9):为什么要进行数据同步
    tomcat报错org.springframework.web.context.ContextLoaderListener找不到
    ibatis知识点
    毕业快一年
    (转)Spring AOP的底层实现技术
    JavaWeb项目中引入spring框架
    Spring的核心机制依赖注入
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9332082.html
Copyright © 2020-2023  润新知