定义
执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。
组成
目标SQL的正文、sql_id和执行计划对应的plan_hash_value
执行计划主体,主要有内部执行步骤、执行顺序、谓词信息、列信息、Cardinality、Cost等
执行计划的额外补充信息,是否动态采用(dynamic sampling)、是否Cardinality Feedback、是否SQL Profile
模块解读
主体Header
ID:序号 Operation: 当前操作的内容 Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。 Cost:SQL执行的代价 Time:Oracle 估计当前操作的时间
Query Block Name
Query Block Name / Object Alias (identified by operation id): --这部分显示的为查询块名和对象别名 ------------------------------------------------------------- 1 - SEL$1 --SEL$为select 的缩写,位于块1,相应的还有DEL$,INS$,UPD$等 3 - SEL$1 / DEPT@SEL$1 --DEPT@SEL$1,对应到执行计划中的操作ID为3上,即在表DEPT上的查询,DEPT为别名,下面类同 4 - SEL$1 / DEPT@SEL$1 6 - SEL$1 / EMP@SEL$1 7 - SEL$1 / J@SEL$1
Outline Data
Outline Data --提纲部分,这部分将执行计划中的图形化方式以文本形式来呈现,即转换为提示符方式 ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE(‘11.2.0.2‘) DB_VERSION(‘11.2.0.2‘) ALL_ROWS OUTLINE_LEAF(@"SEL$1") INDEX(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO")) --指明对于DEPT上的访问方式为使用索引 FULL(@"SEL$1" "EMP"@"SEL$1") --指明对于EMP上的访问方式为全表扫描 FULL(@"SEL$1" "J"@"SEL$1") LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1" "J"@"SEL$1") --指明前导表 USE_MERGE(@"SEL$1" "EMP"@"SEL$1") --使用USE_MERGE提示,即MERGE SORT排序合并连接 USE_HASH(@"SEL$1" "J"@"SEL$1") --使用USE_HASH提示,即HASH连接 END_OUTLINE_DATA */
Predicate Information
Access 通过某种方式定位了需要的数据,然后读取出这些结果集,叫做Access。 表示这个谓词条件的值将会影响数据的访问路劲(表还是索引)。 Filter 把所有的数据都访问了,然后过滤掉不需要的数据,这种方式叫做filter 。 表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
Column Projection Information
Column Projection Information (identified by operation id): --执行时每一步骤所返回的列,下面的不同步骤返回了不同的列 ----------------------------------------------------------- 1 - (#keys=1) "DEPT"."DNAME"[VARCHAR2,14], "EMP"."EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10], "J"."JOB_DESCRIBE"[VARCHAR2,100] 2 - "DEPT"."DNAME"[VARCHAR2,14], "EMP"."EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10], "EMP"."JOB"[VARCHAR2,9] 3 - "DEPT"."DEPTNO"[NUMBER,22], "DEPT"."DNAME"[VARCHAR2,14] 4 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22] 5 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMP"."EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10], "EMP"."JOB"[VARCHAR2,9] 6 - "EMP"."EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10], "EMP"."JOB"[VARCHAR2,9], "EMP"."DEPTNO"[NUMBER,22] 7 - "J"."JOB_NAME"[VARCHAR2,50], "J"."JOB_DESCRIBE"[VARCHAR2,100]
Note
??动态采样(dynamic sampling)是Oracle CBO优化器的一种特性。如果相关数据表没有收集过统计量,又要使用CBO的机制,就会引起动态采样。
Oracle执行计划详解
标签:动态 row 对象 sele ffffff header cat 组成 _id
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did117530