Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 生成和显示执行计划的方法

生成执行计划一条合法的语句在执行之后,就会在内存中至少产生一条执行计划,可以从视图v$sql_plan查询。每一条执行计划对于一个游标。一条语句生产的第一个游标的CHILD_NUMBER(即v$sql_plan中的CHILD_NUMBER)为0,同一条sql语句可能因为环境或版本等其他因素不同而产生不同的执行计划,也就是说一条sql可能有多个CHILD_NUMBER。除执行过的sql会在内存中生成执行计划外,还可以通过explain plan让优化器对sql语句进行解析,生成查询计划。执行explain plan命令后,Oracle会将解释生成的执行计划插入sys.plan_table$(10g之前,表名为plan_table;10g之后,通过公共同义词plan_table指向sys.plan_table$)中。explain plan产生的执行计划不会在语句执行时重用,而是以类似explain plan for<SQL>的形式在缓存中。显示执行计划 通过DBMS_XPLAN包显示执行计划(推荐)DBMS_XPLAN含有5个函数用于输出格式化的执行计划,如下:display:显示explain plan命令解释的执行计划display_cursor:显示内存中的执行计划display_awr:awr历史数据中的执行计划display_sqlset:SQL优化集中语句的执行计划display_sql_plan_baseline:SQL执行计划基线display的用法语法: DBMS_XPLAN.DISPLAY( table_nameINVARCHAR2DEFAULT "PLAN_TABLE", statement_idINVARCHAR2DEFAULTNULL,formatINVARCHAR2DEFAULT"TYPICAL", filter_predsINVARCHAR2 DEFAULT NULL);参数: 
ParameterDescription
table_name存储查询计划的表名,默认值为PLAN_TABLE
statement_id要显示查询计划的SQL语句的ID,如果为空,就会获取最近一条被解释的语句
format输出格式,有以下几种预定义的格式可选择,还可以自定义(这里不多说):
  • BASIC:基本格式,内容最少.
  • TYPICAL: 典型格式,通常够用,默认格式
  • SERIAL: 串行执行格式,这种格式和典型格式输出内容基本一致,只是对于并行查询,不会输出相关的并行内容
  • ALL: 完全格式,输出内容相对完整
filter_preds该参数用谓词条件过滤存储执行计划的表,例如"plan_id = 10或cost>100(显示估算代价大于100的操作),该值默认为空
示例:用explain plan执行sql语句:EXPLAIN PLAN FOR
SELECT * FROM emp e, dept d
  WHERE e.deptno = d.deptno
  AND e.ename="benoit";
Display the plan using the DBMS_XPLAN.DISPLAY table functionSET LINESIZE 130
SET PAGESIZE 0
SELECT * FROM table(DBMS_XPLAN.DISPLAY);
输出结果如下Plan hash value: 3693697075
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time    |
---------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |      |    1 |    57 |    6  (34)| 00:00:01 |
|*  1 |  HASH JOIN        |      |    1 |    57 |    6  (34)| 00:00:01 |
|*  2 |  TABLE ACCESS FULL| EMP  |    1 |    37 |    3  (34)| 00:00:01 |
|  3 |  TABLE ACCESS FULL| DEPT |    4 |    80 |    3  (34)| 00:00:01 |
---------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------
  1 - access("E"."DEPTNO"="D"."DEPTNO")
  2 - filter("E"."ENAME"="benoit")15 rows selected.
  • 1
  • 2
  • 下一页
Oracle 测试常用表BIG_TABLEOracle 联机重做日志文件恢复(redo log)相关资讯      Oracle执行计划 
  • 执行计划出现COLLECTION ITERATOR   (07/23/2015 16:25:04)
  • Oracle关于执行计划的简要分析  (09/23/2014 18:58:58)
  • Oracle使用STORED OUTLINE固化执行  (01/19/2014 13:10:10)
  • Oracle 执行计划中的buffer sort  (12/26/2014 19:32:05)
  • 使用hint优化Oracle的执行计划  (06/21/2014 09:53:44)
  • Oracle获取执行计划的几种方法  (06/17/2013 06:42:24)
本文评论 查看全部评论 (0)
表情: 姓名: 字数