Welcome 微信登录

首页 / 数据库 / MySQL / Oracle执行计划与统计信息的一些总结

2010-07-01 15:031、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、analyzeanalyze 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";Oracle:RMAN 备份与恢复实例Understand Oracle执行计划相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数