2010-07-01 15:03
1、SET AUTOTRACE ON EXPLAIN
(set autot on exp)
SQLPLUS的命令,在執(zhí)行SQL語(yǔ)句的同時(shí)顯示執(zhí)行計(jì)劃,設(shè)置EXP(LAIN)的目的是只顯示執(zhí)行計(jì)劃而不顯示統(tǒng)計(jì)信息.。-
2、SQL>explain plan for select ````````;
SQL>select * from table(dbms_xplan.display);
執(zhí)行了set autotrace on explain語(yǔ)句之后,接下來(lái)的查詢、插入、更新、刪除語(yǔ)句就會(huì)顯示執(zhí)行計(jì)劃,直到執(zhí)行“set autotrace off;”語(yǔ)句。如果是設(shè)置了set autotrace on,除了會(huì)顯示執(zhí)行計(jì)劃之外,還會(huì)顯示一些有用的統(tǒng)計(jì)信息。
執(zhí)行EXPLAIN PLAN FOR 可以只顯示執(zhí)行計(jì)劃,然后執(zhí)行如下查詢
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,'表');(刪除表的統(tǒng)計(jì)信息)
SQL>exec dbms_stats.gather_table_stats(USER,'表',METHOD_OPT=>'FOR ALL COLUMNS SIZE 100')(收集表的統(tǒng)計(jì)信息)
4、AUTOTRACE的幾個(gè)常用選項(xiàng)
set autotrace off ---------------- 不生成autotrace 報(bào)告,這是缺省模式
set autotrace on explain ------ autotrace只顯示優(yōu)化器執(zhí)行路徑報(bào)告
set autotrace on statistics -- 只顯示執(zhí)行統(tǒng)計(jì)信息
set autotrace on ----------------- 包含執(zhí)行計(jì)劃和統(tǒng)計(jì)信息
set autotrace traceonly ------ 同set autotrace on,但是不顯示查詢輸
(1). set autotrace on explain; --只顯示執(zhí)行計(jì)劃
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;--只顯示統(tǒng)計(jì)信息
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;--比較實(shí)用的選項(xiàng),只顯示執(zhí)行計(jì)劃,但是與set autotrace on explain;相比不會(huì)執(zhí)行語(yǔ)句,對(duì)于僅僅查看大表的Explain Plan非常管用。
SQL> set autotrace traceonly explain;
SQL> select * from dba_objects;
已用時(shí)間: 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收集每一行數(shù)據(jù)的統(tǒng)計(jì)信息,比較耗時(shí);estimate收集一部分?jǐn)?shù)據(jù)行的統(tǒng)計(jì)信息)
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'; 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|