oracle执行计划解释

前端之家收集整理的这篇文章主要介绍了oracle执行计划解释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@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>

猜你在找的Oracle相关文章