oracle執行計劃與統計資訊的一些總結
來自:http://hi.baidu.com/dba_jungle/blog/item/874751ab58a1ecbccb130cd2.html
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>
----------
Execution Plan
----------------------------------------------------------
(2). set autotrace on statistics;--只顯示統計資訊
SQL> set autotrace on statistics;
SQL> select count(*) from dba_objects;
----------
Statistics
----------------------------------------------------------