解释计划 oracle,创建自己的oracle解释计划

1、解释计划

当使用explain plan来为一个查询生成预期的执行计划时,输出将包括一下几种:

SQL访问的每一张表;

访问每张表的方法;

每一个需要联结的数据源所使用的联结方法;

按次序列出的所有需要完成的运算;

计划中各步骤的谓语列表信息等等

explain plan for

select t1.name, t2.grade

from table1 t1

left join table2 t2

on t1.id = t2.id

where t1.id =704

;

Explained

查询得:(与谓语有关的运算都会有*号标注)

select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 2814340807

--------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%

--------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 141 | 8

|* 1 | HASH JOIN OUTER | | 1 | 141 | 8

| 2 | TABLE ACCESS BY INDEX ROWID| TABLE1 | 1 | 115 | 2

|* 3 | INDEX RANGE SCAN | INDEX_TABLE1_ID | 1 | | 1

|* 4 | TABLE ACCESS FULL | TABLE2 | 1 | 26 | 5

--------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - access("T1"."ID"="T2"."ID"(+))

3 - access("T1"."ID"=704)

4 - filter("T2"."ID"(+)=704)

Note

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

- dynamic sampling used for this statement (level=2)

22 rows selected

2、系统解释计划表的内容

desc plan_table

Name Type Nullable Default Comments

----------------- -------------- -------- ------- --------

STATEMENT_ID VARCHAR2(30) Y

PLAN_ID NUMBER Y

TIMESTAMP DATE Y

REMARKS VARCHAR2(4000) Y

OPERATION VARCHAR2(30) Y

OPTIONS VARCHAR2(255) Y

OBJECT_NODE VARCHAR2(128) Y

OBJECT_OWNER VARCHAR2(30) Y

OBJECT_NAME VARCHAR2(30) Y

OBJECT_ALIAS VARCHAR2(65) Y

OBJECT_INSTANCE INTEGER Y

OBJECT_TYPE VARCHAR2(30) Y

OPTIMIZER VARCHAR2(255) Y

SEARCH_COLUMNS NUMBER Y

ID INTEGER Y

PARENT_ID INTEGER Y

DEPTH INTEGER Y

POSITION INTEGER Y

COST INTEGER Y

CARDINALITY INTEGER Y

BYTES INTEGER Y

OTHER_TAG VARCHAR2(255) Y

PARTITION_START VARCHAR2(255) Y

PARTITION_STOP VARCHAR2(255) Y

PARTITION_ID INTEGER Y

OTHER LONG Y

OTHER_XML CLOB Y

DISTRIBUTION VARCHAR2(30) Y

CPU_COST INTEGER Y

IO_COST INTEGER Y

TEMP_SPACE INTEGER Y

ACCESS_PREDICATES VARCHAR2(4000) Y

FILTER_PREDICATES VARCHAR2(4000) Y

PROJECTION VARCHAR2(4000) Y

TIME INTEGER Y

QBLOCK_NAME VARCHAR2(30) Y

其中常用字段说明

df9561a2680fc112e77eadf1222ef79b.png

创建自己的解释计划

select id,parent_id,

lpad(' ',level)||operation||' ' ||options||' '||object_name as operation

from plan_table

start with id=0

connect by prior id = parent_id;

结果为

ID PARENT_ID OPERATION

--------------------------------------- --------------------------------------- -----------------------------------------

0 SELECT STATEMENT

1 0 HASH JOIN OUTER

2 1 TABLE ACCESS BY INDEX ROWID TABLE1

3 2 INDEX RANGE SCAN INDEX_TABLE1_ID

4 1 TABLE ACCESS FULL TABLE2

通过查看解释计划,可以针对性的修改自己的SQL语句来提升效率。比如修改或者增加索引等等

查看执行计划与此相似,可以通过dbms.display_cursor函数来查看,也可以通过查询V$SQL_PLAN_STATISTICS_ALL中的相关字段来查看。

【转】Oracle执行计划解释

Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

Oracle SQL Developer中查看解释计划Explain Plan的两种方法

方法一: 比如要查看解释计划的SQL是:select * from hy_emp 那么在输入窗口输入: EXPLAIN PLAN FOR select * from hy_emp 之后执行,输出窗口会 ...

看懂Oracle执行计划

最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

从Count看Oracle执行计划的选择

一. 前言 在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么? 试图从最简单的coun ...

Oracle执行计划 explain plan

Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...

[转]看懂Oracle执行计划

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值