@H_502_0@设置执行计划方法:
@H_502_0@set autotrace off 默认值,关闭执行计划
@H_502_0@set autotrace on explain 只显示执行计划
@H_502_0@set autotrace on statistics 只显示执行计划统计信息
@H_502_0@set autotrace on 显示执行计划和统计信息
@H_502_0@set autotrace traceonly 与on相似,不显示语句的执行结果
@H_502_0@
@H_502_0@1.oracle数据库访问数据的方法
@H_502_0@(1).全表扫描(Full Table Scans,FTS)
@H_502_0@(2).通过隐藏rowid字段扫描(Table Access by ROWID)
@H_502_0@(3).索引范围扫描(Index range Scan)
@H_502_0@(4).索引唯一扫描(Index unique scan)
@H_502_0@(5).索引全扫描(Index full scan)
@H_502_0@(6).索引快速扫描(Index fast full scan)
@H_502_0@
@H_502_0@1).全表扫描
@H_502_0@sql>set autotrace on
@H_502_0@sql> select * from emp where comm=1400;
@H_502_0@EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
@H_502_0@---------- ---------- --------- ---------- --------- ---------- ---------- ----------
@H_502_0@7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
@H_502_0@
@H_502_0@Execution Plan
@H_502_0@----------------------------------------------------------
@H_502_0@Plan hash value: 3956160932
@H_502_0@--------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@--------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 1 | 38 | 3 (0)| 00:00:01 |
@H_502_0@|* 1 | TABLE ACCESS FULL| EMP | 1 | 38 | 3 (0)| 00:00:01 |
@H_502_0@--------------------------------------------------------------------------
@H_502_0@
@H_502_0@Predicate Information (identified by operation id):
@H_502_0@---------------------------------------------------
@H_502_0@ 1 - filter("COMM"=1400)
@H_502_0@Access:表示条件的值将会影响数据的访问路径(表和索引)
@H_502_0@Filter:表示条件的值不会影响数据的访问路径,只起过滤作用
@H_502_0@Statistics
@H_502_0@----------------------------------------------------------
@H_502_0@ 1 recursive calls
@H_502_0@ 0 db block gets --读了多少个数据块
@H_502_0@ 7 consistent gets --逻辑读(从buffer cache中读取的block数量)
@H_502_0@ 0 physical reads --物理读(从磁盘中读取的block数量)
@H_502_0@ 0 redo size --产生多少redo日志
@H_502_0@ 1028 bytes sent via sql*Net to client --客户端传入的字节数
@H_502_0@ 523 bytes received via sql*Net from client --服务端传入到客户端的字节数
@H_502_0@ 2 sql*Net roundtrips to/from client
@H_502_0@ 0 sorts (memory) --排序占用的内存
@H_502_0@ 0 sorts (disk) --排序占用的磁盘
@H_502_0@ 1 rows processed --影响多少行
@H_502_0@sql>
@H_502_0@
@H_502_0@2).rowid字段扫描
@H_502_0@sql> select * from emp where rowid='AAAVREAAEAAAACXAAN';
@H_502_0@EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
@H_502_0@---------- ---------- --------- ---------- --------- ---------- ---------- ----------
@H_502_0@7934 MILLER CLERK 7782 23-JAN-82 1300 10
@H_502_0@Execution Plan
@H_502_0@----------------------------------------------------------
@H_502_0@Plan hash value: 1116584662
@H_502_0@-----------------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@-----------------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 1 | 38 | 1 (0)| 00:00:01 |
@H_502_0@| 1 | TABLE ACCESS BY USER ROWID| EMP | 1 | 38 | 1 (0)| 00:00:01 |
@H_502_0@-----------------------------------------------------------------------------------
@H_502_0@Statistics
@H_502_0@----------------------------------------------------------
@H_502_0@ 1 recursive calls
@H_502_0@ 0 db block gets
@H_502_0@ 1 consistent gets
@H_502_0@ 0 physical reads
@H_502_0@ 0 redo size
@H_502_0@ 1022 bytes sent via sql*Net to client
@H_502_0@ 523 bytes received via sql*Net from client
@H_502_0@ 2 sql*Net roundtrips to/from client
@H_502_0@ 0 sorts (memory)
@H_502_0@ 0 sorts (disk)
@H_502_0@ 1 rows processed
@H_502_0@sql>
@H_502_0@
@H_502_0@3).索引范围扫描
@H_502_0@
@H_502_0@sql> create index in_sal on emp(sal);
@H_502_0@Index created.
@H_502_0@sql> select * from emp where sal < 1000;
@H_502_0@EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
@H_502_0@---------- ---------- --------- ---------- --------- ---------- ---------- ----------
@H_502_0@7369 SMITH CLERK 7902 17-DEC-80 800 20
@H_502_0@7900 JAMES CLERK 7698 03-DEC-81 950 30
@H_502_0@Execution Plan
@H_502_0@----------------------------------------------------------
@H_502_0@Plan hash value: 3065173639
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 1 | 38 | 2 (0)| 00:00:01 |
@H_502_0@| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 38 | 2 (0)| 00:00:01 |
@H_502_0@|* 2 | INDEX RANGE SCAN | IN_SAL | 1 | | 1 (0)| 00:00:01 |
@H_502_0@--------------------------------------------------------------------------------------Predicate Information (identified by operation id):
@H_502_0@---------------------------------------------------
@H_502_0@ 2 - access("SAL"<1000)
@H_502_0@Statistics
@H_502_0@----------------------------------------------------------
@H_502_0@ 1 recursive calls
@H_502_0@ 0 db block gets
@H_502_0@ 4 consistent gets
@H_502_0@ 0 physical reads
@H_502_0@ 0 redo size
@H_502_0@ 1115 bytes sent via sql*Net to client
@H_502_0@ 523 bytes received via sql*Net from client
@H_502_0@ 2 sql*Net roundtrips to/from client
@H_502_0@ 0 sorts (memory)
@H_502_0@ 0 sorts (disk)
@H_502_0@ 2 rows processed
@H_502_0@sql>
@H_502_0@
@H_502_0@(4).索引唯一扫描
@H_502_0@sql> select * from emp where empno=7566;
@H_502_0@EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
@H_502_0@---------- ---------- --------- ---------- --------- ---------- ---------- ----------
@H_502_0@7566 JONES MANAGER 7839 02-APR-81 2975 20
@H_502_0@
@H_502_0@Execution Plan
@H_502_0@----------------------------------------------------------
@H_502_0@Plan hash value: 2949544139
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 1 | 38 | 1 (0)| 00:00:01 |
@H_502_0@| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 38 | 1 (0)| 00:00:01 |
@H_502_0@|* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@Predicate Information (identified by operation id):
@H_502_0@---------------------------------------------------
@H_502_0@ 2 - access("EMPNO"=7566)
@H_502_0@Statistics
@H_502_0@----------------------------------------------------------
@H_502_0@ 1 recursive calls
@H_502_0@ 0 db block gets
@H_502_0@ 2 consistent gets
@H_502_0@ 0 physical reads
@H_502_0@ 0 redo size
@H_502_0@ 892 bytes sent via sql*Net to client
@H_502_0@ 512 bytes received via sql*Net from client
@H_502_0@ 1 sql*Net roundtrips to/from client
@H_502_0@ 0 sorts (memory)
@H_502_0@ 0 sorts (disk)
@H_502_0@ 1 rows processed
@H_502_0@sql>
@H_502_0@
@H_502_0@(5).索引全扫描
@H_502_0@sql> select * from emp where sal >2000 order by empno;
@H_502_0@EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
@H_502_0@---------- ---------- --------- ---------- --------- ---------- ---------- ----------
@H_502_0@7566 JONES MANAGER 7839 02-APR-81 2975 20
@H_502_0@7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
@H_502_0@7782 CLARK MANAGER 7839 09-JUN-81 2450 10
@H_502_0@7788 SCOTT ANALYST 7566 19-APR-87 3000 20
@H_502_0@7839 KING PRESIDENT 17-NOV-81 5000 10
@H_502_0@7902 FORD ANALYST 7566 03-DEC-81 3000 20
@H_502_0@
@H_502_0@6 rows selected.
@H_502_0@Execution Plan
@H_502_0@----------------------------------------------------------
@H_502_0@Plan hash value: 4170700152
@H_502_0@-------------------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 10 | 380 | 2 (0)| 00:00:01 |
@H_502_0@|* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 10 | 380 | 2 (0)| 00:00:01 |
@H_502_0@| 2 | INDEX FULL SCAN | PK_EMP | 14 | | 1 (0)| 00:00:01 |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@Predicate Information (identified by operation id):
@H_502_0@---------------------------------------------------
@H_502_0@ 1 - filter("SAL">2000)
@H_502_0@Statistics
@H_502_0@----------------------------------------------------------
@H_502_0@ 1 recursive calls
@H_502_0@ 0 db block gets
@H_502_0@ 4 consistent gets
@H_502_0@ 0 physical reads
@H_502_0@ 0 redo size
@H_502_0@ 1263 bytes sent via sql*Net to client
@H_502_0@ 523 bytes received via sql*Net from client
@H_502_0@ 2 sql*Net roundtrips to/from client
@H_502_0@ 0 sorts (memory)
@H_502_0@ 0 sorts (disk)
@H_502_0@ 6 rows processed
@H_502_0@sql>
@H_502_0@
@H_502_0@6)索引快速扫描
@H_502_0@
@H_502_0@2.使用explain plan for查看执行计划
@H_502_0@sql> explain plan for select * from emp where sal > 3000;
@H_502_0@Explained.
@H_502_0@sql> seletc * from table(dbms_xplan.display);
@H_502_0@PLAN_TABLE_OUTPUT
@H_502_0@---------------------------------------------------------------------------------------
@H_502_0@Plan hash value: 3065173639
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
@H_502_0@--------------------------------------------------------------------------------------
@H_502_0@| 0 | SELECT STATEMENT | | 7 | 266 | 2 (0)| 00:00:01 |
@H_502_0@| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 7 | 266 | 2 (0)| 00:00:01 |
@H_502_0@|* 2 | INDEX RANGE SCAN | IN_SAL | 7 | | 1 (0)| 00:00:01 |
@H_502_0@-------------------------------------------------------------------------------------
@H_502_0@Predicate Information (identified by operation id):
@H_502_0@
@H_502_0@PLAN_TABLE_OUTPUT
@H_502_0@----------------------------------------------------------------------------------------
@H_502_0@ 2 - access("SAL">3000)
@H_502_0@14 rows selected.
@H_502_0@sql>