1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > EXPLAIN PLAN获取SQL语句执行计划

EXPLAIN PLAN获取SQL语句执行计划

时间:2020-01-25 21:39:45

相关推荐

EXPLAIN PLAN获取SQL语句执行计划

一、获取SQL语句执行计划的方式

1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划

2. 启用执行计划跟踪功能,即autotrace功能

3. 使用PL/SQL Developer提供的获取执行计划方法 - F5键

4.查询动态性能视图v$sql_plan,v$sql_plan_statistics,v$sql_workarea 等来获取已缓存到库缓存中的真实执行计划

5.查询自动工作量资料库(Automatic Workload Repository)或查询Statspack,即从资料库中获取执行计划

6. 使用Toad工具来获取执行计划

二、用explain plan来获取SQL语句执行计划

1. 工作实质

将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交。(可以对select,insert,update,merge,delete,create table, create index,alter index等加载执行计划到plan_table。)

2. 前提条件

需要先创建plan_table,创建方法(可参考Oracle的AUTOTRACE功能):@J:/oracle/product/10.2.0/db_1/RDBMS/ADMIN/utlxplan.sql

对当前的SQL语句有执行权限以及对依赖的对象有相应操作的权限

3. 使用方法:

explain plan for select * from dept where deptno=20; --未设置标记位

explain plan set statement_id='t1' for select * from dept where deptno=20; --设置标记位为T1

SQL>explain plan set statement_id = 't1' for select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

SQL> col operation format a18

SQL> col options format a15

SQL> col "OBJECT NAME" format a12

SQL> col order format a6

SQL> col opt format a6

SQL>

SQL> SELECT LPAD(' ', 2 * (LEVEL - 1)) || operation "OPERATION",

2 options "OPTIONS",

3 DECODE(TO_CHAR(id),

4 '0',

5 'COST = ' || NVL(TO_CHAR(position), 'n/a'),

6 object_name) "OBJECT NAME",

7 id || '-' || NVL(parent_id, 0) || '-' || NVL(position, 0) "ORDER",

8 SUBSTR(optimizer, 1, 6) "OPT"

9 FROM plan_table

10 START WITH id = 0

11 AND statement_id = 't1'

12 CONNECT BY PRIOR id = parent_id

13 AND statement_id = 't1' ;

OPERATION OPTIONS OBJECT NAME ORDER OPT

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

SELECT STATEMENT COST = 4 0-0-4 ALL_RO

NESTED LOOPS 1-0-1

TABLE ACCESS FULL EMP 2-1-1 ANALYZ

TABLE ACCESS BY INDEX ROWID DEPT 3-1-2 ANALYZ

INDEX UNIQUE SCAN PK_DEPT 4-3-1 ANALYZ

查询结果中的order列与opt列

order

order列:ID-父ID-执行计划中这一步骤的位置

ID列标识了这个步骤,但并没有说明执行的顺序

父ID表明了这个步骤中的父步骤

位置信息说明了父ID相同的子操作的执行顺序

opt

说明当前优化器使用的模式

SQL执行计划分析:

1.从步骤2开始执行,步骤2对EMP表做全表扫描,把得到的结果返回步骤1;

2.步骤4对DEPT表做唯一索引扫描,扫描的结果返回步骤3,步骤3根据INDEX ROWID找到对应的数据,并返回步骤1;

3.此时,步骤1对前两步中返回的数据做JOIN,获得的最终结果集返回给步骤0,SQL完成查询;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。