|  
  2010-07-01 15:03 
1、SET AUTOTRACE ON EXPLAIN 
(set autot on exp) 
SQLPLUS的命令,在执行SQL语句的同时显示执行计划,设置EXP(LAIN)的目的是只显示执行计划而不显示统计信息.。- 
  
2、SQL>explain plan for select ````````; 
SQL>select * from table(dbms_xplan.display); 
执行了set autotrace on explain语句之后,接下来的查询、插入、更新、删除语句就会显示执行计划,直到执行“set autotrace off;”语句。如果是设置了set autotrace on,除了会显示执行计划之外,还会显示一些有用的统计信息。 
执行EXPLAIN PLAN FOR 可以只显示执行计划,然后执行如下查询 
SQL> select * from table(dbms_xplan.display); 
如: 
SQL> explain plan for select * from emp where deptno='20'; 
Explained. 
SQL> select * from table(dbms_xplan.display); 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
Plan hash value: 3956160932 
-------------------------------------------------------------------------- 
| Id   | Operation          | Name | Rows   | Bytes | Cost (%CPU)| Time      | 
-------------------------------------------------------------------------- 
|    0 | SELECT STATEMENT   |       |      5 |    150 |      3    (0)| 00:00:01 | 
|*   1 |   TABLE ACCESS FULL| EMP   |      5 |    150 |      3    (0)| 00:00:01 | 
-------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
    1 - filter("DEPTNO"=20) 
13 rows selected. 
3、SQL>exec dbms_stats.delete_table_stats(USER,'表');(删除表的统计信息) 
SQL>exec dbms_stats.gather_table_stats(USER,'表',METHOD_OPT=>'FOR ALL COLUMNS SIZE 100')(收集表的统计信息) 
4、AUTOTRACE的几个常用选项   
       set autotrace off ---------------- 不生成autotrace 报告,这是缺省模式 
set autotrace on explain ------ autotrace只显示优化器执行路径报告 
set autotrace on statistics -- 只显示执行统计信息 
set autotrace on ----------------- 包含执行计划和统计信息 
set autotrace traceonly ------ 同set autotrace on,但是不显示查询输 
 
(1). set autotrace on explain; --只显示执行计划 
SQL> set autotrace on explain; 
SQL> 
select count(*) from dba_objects; 
COUNT(*) 
---------- 
    31820 
Execution Plan 
---------------------------------------------------------- 
  0      SELECT STATEMENT Optimizer=CHOOSE 
  1    0   SORT (AGGREGATE) 
  2    1     VIEW OF 'DBA_OBJECTS' 
  3    2       UNION-ALL 
  4    3         FILTER 
  5    4           TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$' 
  6    5             NESTED LOOPS 
  7    6               TABLE ACCESS (FULL) OF 'USER$' 
  8    6               INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE) 
  9    4           TABLE ACCESS (BY INDEX ROWID) OF 'IND$' 
10    9             INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE) 
11    3         NESTED LOOPS 
12   11           TABLE ACCESS (FULL) OF 'USER$' 
13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE) 
(2). set autotrace on statistics;--只显示统计信息 
SQL> set autotrace on statistics; 
SQL> select count(*) from dba_objects; 
COUNT(*) 
---------- 
    31820 
Statistics 
---------------------------------------------------------- 
         0 recursive calls 
         0 db block gets 
     25754 consistent gets 
         0 physical reads 
         0 redo size 
       383 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) 
         1 rows processed 
(3). set autotrace traceonly;--同set autotrace on 只是不显示查询输出 
SQL> set autotrace traceonly; 
SQL> select count(*) from dba_objects; 
Execution Plan 
---------------------------------------------------------- 
  0      SELECT STATEMENT Optimizer=CHOOSE 
  1    0   SORT (AGGREGATE) 
  2    1     VIEW OF 'DBA_OBJECTS' 
  3    2       UNION-ALL 
  4    3         FILTER 
  5    4           TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$' 
  6    5             NESTED LOOPS 
  7    6               TABLE ACCESS (FULL) OF 'USER$' 
 8    6               INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE) 
  9    4           TABLE ACCESS (BY INDEX ROWID) OF 'IND$' 
10    9             INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE) 
11    3         NESTED LOOPS 
12   11           TABLE ACCESS (FULL) OF 'USER$' 
13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE) 
Statistics 
---------------------------------------------------------- 
         0 recursive calls 
         0 db block gets 
     25754 consistent gets 
         0 physical reads 
         0 redo size 
       383 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) 
         1 rows processed 
(4).set autotrace traceonly explain;--比较实用的选项,只显示执行计划,但是与set autotrace on explain;相比不会执行语句,对于仅仅查看大表的Explain Plan非常管用。 
SQL> set autotrace traceonly explain; 
SQL> select * from dba_objects; 
已用时间: 00: 00: 00.00 
Execution Plan 
---------------------------------------------------------- 
  0      SELECT STATEMENT Optimizer=CHOOSE 
  1    0   VIEW OF 'DBA_OBJECTS' 
  2    1     UNION-ALL 
  3    2       FILTER 
  4    3         TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$' 
  5    4           NESTED LOOPS 
  6    5             TABLE ACCESS (FULL) OF 'USER$' 
  7    5             INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE) 
  8    3         TABLE ACCESS (BY INDEX ROWID) OF 'IND$' 
  9    8           INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE) 
10    2       TABLE ACCESS (BY INDEX ROWID) OF 'LINK$' 
11   10         NESTED LOOPS 
12   11           TABLE ACCESS (FULL) OF 'USER$' 
13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE) 
5、analyze 
analyze table hr.employees compute(estimate) statistics;(compute收集每一行数据的统计信息,比较耗时;estimate收集一部分数据行的统计信息) 
select t.owner,t.table_name,t.tablespace_name,t.blocks,t.empty_blocks,t.avg_space 
from dba_tables t 
where t.owner='HR';  本文出自:亿恩科技【www.enkj.com】 
      
      
		服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM] 
       |