SET AUTOTRACE用法查看执行计划,及其索引访问方式
1、SET AUTOTRACE参数
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出
2、只能在sql plus下执行
SQL> set autotrace on
SQL> select count(*) from TEST_DEPT
2 /
COUNT(*)
----------
5
执行计划
----------------------------------------------------------
Plan hash value: 1645695115
------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| TEST_DEPT | 5 | 2 (0)| 00:00:01 |
------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls--循环递归次数
0 db block gets--请求数据块在buffer能满足的个数
7 consistent gets--逻辑IO用户读表并计算行数,数据请求总数在回滚段Buffer中
0 physical reads--C从磁盘读到Buffer Cache数据块数量
0 redo size--重做日志大小
408 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)--内存中发生排序
0 sorts (disk)--磁盘中发生排序
1 rows processed
索引--表的访问方式
1 )full table scan --全表扫描
依赖于oracle 优化器的初始化参数
2) Index Lookup 索引扫描
index unique scan--索引唯一扫描
explain plan for select empno,ename from emp where empno=10
index range scan--索引局部扫描
explain plan for select mgr from emp where mgr=5
index full scan--索引全局扫描
explain plan for select empno,ename from big_emp order by empno,ename
index fast full scan--索引快速全局扫描,不带order by 情况下常发生
explain plan for select empno,ename from big_emp
index skip scan--索引跳跃式扫描,where 条件列是非索引的前导列情况下常发生
create index i_emp on emo(empno,ename)
explain plan for select job from emo where ename='smith'
3) ROWID 物理ID扫描
Rowid扫描是最快的访问数据方式