没有合适的资源?快使用搜索试试~ 我知道了~
执行计划表示了SQL语句执行顺序与方法。 执行计划的存储方式: 一但产生执行计划。这个计划就会和sql语句一起存储在library cache中。sql语句按照hash的算法,产生hash 值,这里,我们可以把hash值当做一个PK值,然后根据这个值去寻找library cache相同的hash 值。如果有则应用这个hash所对应的执行计划。如果没有则再生成一个新的执行计划。
资源推荐
资源详情
资源评论
执行计划
---by selina
一、基本概念
执行计划表示了 SQL 语句执行顺序与方法。
执行计划的存储方式:
一但产生执行计划。这个计划就会和 sql 语句一起存储在 library cache 中。sql 语句按照
hash 的算法,产生 hash 值,这里,我们可以把 hash 值当做一个 PK 值,然后根据这个
值去寻找 library cache 相同的 hash 值。如果有则应用这个 hash 所对应的执行计划。如
果没有则再生成一个新的执行计划。
二、执行计划的使用
2.1 启用执行计划
1) sysdba 执行/home/oracle/product/9.2.0/sqlplus/admin/plustrce.sql 脚本,建立可以访问
v_$sesstat,v_$statname ,v_$mystat 这三个视图的 role---plustrace,并把 plustrace
角色赋给执行用户
2) 执行用户必须运行/home/oracle/product/9.2.0/rdbms/admin/utlxplan.sql,建立存储执
行计划的表
2.2、显示执行计划的方法
2.2.1 启用 autotrace
sql>set autotrace on
2.2.2 用 UTLXPLS.SQL 和 UTLXPLP.SQL
UTLXPLS.SQL:显示串行的进程的执行计划
UTLXPLP.SQL:显示并行的进程的执行计划
EG:
SQL> explain plan for select * from dual;
SQL> @/home/oracle/9.2.0.1/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS FULL | DUAL | | | |
-------------------------------------------------------------------
Note: rule based optimization
2.2.3 用 dbms_xplan.display
function display (table_name varchar2 default 'PLAN_TABLE',
statement_id varchar2 default null,
format varchar2 default 'TYPICAL')
- format:
'BASIC': 只显示基本信息,如操作 ID,操作名等
'TYPICAL': 这是默认值,显示内容包括
operation id, name and option,
#rows, #bytes and optimizer cost.
'ALL': 比 typical 多了 PX server 的一些信息,只在并行机制有效
'SERIAL':只显示 serial 的信息。不显示并行的信息
SQL> explain plan for SELECT /*+ PARALLEL(e) PARALLEL(d) */ dname,
MAX(sal), AVG(sal) FROM emp e, dept d WHERE e.deptno = d.deptno
GROUP BY
dname;
SQL> select * from table(dbms_xplan.display());
SQL> select * from table(dbms_xplan.display('EMP',null,'ALL'));
三、sql 的执行顺序
1、语法分析
检查语句的语法
2、语义分析
检查对像是否存和是否可用
3、解析视图
把查询里的视图分解成基本的表
4、事务说明
把复杂的查询语句分解成简单的语句
5、决定用 RBO(用规则)还是 CBO(用分析表后的统计信息来估计成本)
6、产生执行计划
7、执行 SQL 语句
四、执行计划的执行顺序
select ename,dname
from emp, dept
where emp.deptno=dept.deptno
and dept.dname in ('ACCOUNTING','RESEARCH','SALES','OPERATIONS');
This produces the following explain plan:
Execution Plan ----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)
1 0 HASH JOIN (Cost=3 Card=8 Bytes=248)
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=3 Bytes=36)
3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=16 Bytes=304)
在执行计划前有两列数值。第一列是该行计划的 ID。第二列是该行计划的父 ID。
下面就来看看语句的执行顺序
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)
ID=0 没有父 ID,但有一个子 ID,子 ID=1。所以必须先执行子 ID
1 0 HASH JOIN (Cost=3 Card=8 Bytes=248)
ID=1 的父 ID 是 0,子 ID 是 2、3。所以要行执行子 ID
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=3 Bytes=36)
ID=2 的负 ID 是 1,没有子 ID,所以可以执行,然后把结果集传给 ID=1
剩余7页未读,继续阅读
资源评论
lyczyw
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功