Oracle执行计划讲解

上传人:xian****812 文档编号:327400986 上传时间:2022-07-26 格式:DOC 页数:73 大小:139.01KB
返回 下载 相关 举报
Oracle执行计划讲解_第1页
第1页 / 共73页
Oracle执行计划讲解_第2页
第2页 / 共73页
Oracle执行计划讲解_第3页
第3页 / 共73页
Oracle执行计划讲解_第4页
第4页 / 共73页
Oracle执行计划讲解_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《Oracle执行计划讲解》由会员分享,可在线阅读,更多相关《Oracle执行计划讲解(73页珍藏版)》请在金锄头文库上搜索。

1、Oracle执行计划 讲解看懂Oracle执行计划是优化的第一步,让我们从下面的例子开始吧。下面为补充内容1、创建测试表SQLcreatetabletasselect1id,object_namefromdba_objects;TablecreatedSQLupdatetsetid=99whererownum=1;1rowupdatedSQLcommit;CommitcompleteSQLcreateindext_indont(id);Indexcreated oracle优化器:RBO和CBO两种, 从oracle10g开始优化器已经抛弃了RBO,下面的列子说明CBO大概是怎样的SQLsel

2、ect/*+dynamic_sampling(t0)*/*fromtwhereid=1;50819rowsselected.ExecutionPlan-Planhashvalue:1376202287-|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-|0|SELECTSTATEMENT|195|15405|51(0)|00:00:01|1|TABLEACCESSBYINDEXROWID|T|195|15405|51(0)|00:00:01|*2|INDEXRANGESCAN|T_IND|78|50(0)|00:00:01|-PredicateInf

3、ormation(identifiedbyoperationid):-2-access(ID=1) 现象t表还没有被分析,提示/*+dynamic_sampling(t 0) */*的目的是让CBO无法通过动态采样获取表中的实际数据情况,此时CBO只能根据T表中非常有限的信息(比如表中的extents数量,数据块的数量)来猜测表中的数据。从结果中可以看到CBO猜出表中id=1的有195条,这个数值对于表的总数来说,是一个非常小的值,所以CBO选择了索引而不是全表扫描。 而实际情况如下所示:SQLselect*fromtwhereid=12;50819rowsselected.Execution

4、Plan-Planhashvalue:1601196873-|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-|0|SELECTSTATEMENT|49454|3815K|67(2)|00:00:01|*1|TABLEACCESSFULL|T|49454|3815K|67(2)|00:00:01|-PredicateInformation(identifiedbyoperationid):-1-filter(ID=1) 通过动态取样,CBO估算出行数为49454,非常接近于真实50820数目。选择了全表扫描。 我们来收集一下统计信息SQLexecdb

5、ms_stats.gather_table_stats(user,t,cascade=true);SQLselect*fromtwhereid=1;50819rowsselected.ExecutionPlan-Planhashvalue:1601196873-|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-|0|SELECTSTATEMENT|50815|1339K|67(2)|00:00:01|*1|TABLEACCESSFULL|T|50815|1339K|67(2)|00:00:01|-PredicateInformation(identi

6、fiedbyoperationid):-1-filter(ID=1)现在扫描过的行数为50815。如果我们更新了所有的id为99看看。SQLupdatetsetid=99;50820rowsupdatedSQLselect*fromtwhereid=99;ExecutionPlan-Planhashvalue:1376202287-|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-|0|SELECTSTATEMENT|1|27|2(0)|00:00:01|1|TABLEACCESSBYINDEXROWID|T|1|27|2(0)|00:00:01|*

7、2|INDEXRANGESCAN|T_IND|1|1(0)|00:00:01|-PredicateInformation(identifiedbyoperationid):-2-access(ID=99) 因为没有对表进行分析,所以表中的分析数据还是之前的信息,CBO并不知道。我们可以看出Rows值为1,也就是说CBO人为表T中的ID=99的值只有1条,所有选择仍然是索引。 我们收集一把统计信息。SQLexecdbms_stats.gather_table_stats(user,t,cascade=true);PL/SQLproceduresuccessfullycompletedSQLselect*fromtwhereid=99;50820rowsselected.ExecutionPlan-Planhashvalue:1601196873-|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号