Some summary of oracle execution plan and statistical information

2010-07-01 15:03
1. The command of SET AUTOTRACE ON EXPLAIN
(set autot on exp)
SQLPLUS displays the execution plan while executing the SQL statement. The purpose of setting EXP (LAIN) is to only display the execution plan without displaying statistical information.
2. SQL>explain plan for select ````````;
SQL>select * from table(dbms_xplan.display);

After executing the set autotrace on explain statement, the next query, insert, update, and delete statements will display the execution plan until the "set autotrace off;" statement is executed. If set autotrace on is set, in addition to displaying the execution plan, some useful statistics will also be displayed.

Execute EXPLAIN PLAN FOR to display only the execution plan, and then execute the following query

SQL> select * from table(dbms_xplan.display);

Such as:

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,'table'); (delete table statistics)

SQL>exec dbms_stats.gather_table_stats(USER,'table',METHOD_OPT=>'FOR ALL COLUMNS SIZE 100') (collect table statistics)

4. Several common options of AUTOTRACE  

       set autotrace off ---------------- No autotrace report is generated, this is the default mode
set autotrace on explain ------ autotrace only displays the optimizer execution path report
set autotrace on statistics - display only the execution statistics
set autotrace on ----------------- contains the execution plan and statistics
set autotrace traceonly ------ same as set autotrace on, but not Show query input


(1). set autotrace on explain; - only show the execution plan
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;--a more practical option, only the execution plan is displayed, but the statement will not be executed compared with set autotrace on explain;. It is very useful for Explain Plan that only looks at large tables.
SQL> set autotrace traceonly explain;
SQL> select * from dba_objects;
Elapsed time: 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 collects statistics for each row of data, which is time-consuming; estimate collects statistics for some data rows)

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';

Guess you like

Origin blog.csdn.net/wangshengfeng1986211/article/details/6561441