小弟最近研究SQL优化语句  
可是在PL/SQL中的命令窗口执行的语句时间不确定。
看不出优化完与优化前的差距,哪个语句性能更好
请大家帮忙

解决方案 »

  1.   

    有如下查看执行计划方式:
    1.sqlplus中autotrace
    2.dbms_system.set_sql_trace_in_session()
    3.statspack
    4.explain plan for your sql
    5.10046
      

  2.   

    显示时间用:
    set timing on执行计划用:
    set autotrace on
      

  3.   

    还有:alter session|system set sql_trace=true
      

  4.   

    OPER@tl>create table test(aaa number);表已创建。OPER@tl>set autotrace on
    OPER@tl>insert into test values(10);已创建 1 行。
    执行计划
    -----------------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    -------------------------------------------------------------------------
    |   0 | INSERT STATEMENT |      |     1 |   100 |     1   (0)| 00:00:01 |
    -------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              3  recursive calls
             22  db block gets
              5  consistent gets
              0  physical reads
              0  redo size
            913  bytes sent via SQL*Net to client
            936  bytes received via SQL*Net from client
              4  SQL*Net roundtrips to/from client
              2  sorts (memory)
              0  sorts (disk)
              1  rows processedOPER@tl>select * from test;       AAA
    ----------
            10
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1357081020--------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |     1 |    13 |     3   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| TEST |     1 |    13 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------Note
    -----
       - dynamic sampling used for this statement
    统计信息
    ----------------------------------------------------------
             28  recursive calls
              0  db block gets
             17  consistent gets
              0  physical reads
              0  redo size
            407  bytes sent via SQL*Net to client
            400  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processedOPER@tl>
      

  5.   

    SQL> SET TIMING ON
    SQL> SET AUTOTRACE TRACEONLY
    OR OPEN "PL\SQL DEVELOPER TOOL" -> F5
      

  6.   

    OPER@tl>
    这个是在什么里?
    用的是PL/SQL么
      

  7.   

    有如下查看执行计划方式: 
    1.sqlplus中autotrace 
    2.dbms_system.set_sql_trace_in_session() 
    3.statspack 
    4.explain plan for your sql 
    5.10046
      

  8.   

    所有工具均只能得到SQL的开销,具体不会给出任何优化建议。
    所以,需要懂得那些数据是对性能有较大影响的。是可以花费较少的
    成本得到较好的优化效果的。
    如:
    统计信息
    ----------------------------------------------------------
             28  recursive calls
              0  db block gets
             17  consistent gets
              0  physical reads
              0  redo size
            407  bytes sent via SQL*Net to client
            400  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
    中的:
             17  consistent gets 表示逻辑读,如果读取很少几条 rows ,而数据很大,则重点优化
    对应步骤中的最多逻辑读的SQL。