资源描述:
《Oracle执行计划详细解读.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、Oracle执行计划解读培训教师:谢高兴时间:2006.4.27BEGINSQL执行过程1,解析SQL2,执行3,显示结果集4,转换字段数据检查安全性检查SQL语法查询重新书写创建执行计划捆绑执行计划执行执行计划读取结果集执行计划执行计划:Oracle内部的机器级代码,决定如何访问存储器,得到需要的结果集。执行计划的主要内容:访问方式,访问顺序。得到执行计划的方式1.Explain(解释)2.Autotrace(自动跟踪)3.其他工具基本格式:explainplansetSTATEMENT_ID='
2、testplan'ForSelect…..(Select,insert,update等数据操作语句均可)基本使用方式:SQL>setautotraceon;(SQLPLUS中使用)准备:创建Plan_table表createtableplan_table(statement_idvarchar2(30),timestampdate,remarksvarchar2(80),operationvarchar2(30),optionsvarchar2(30),object_nodevarchar2(128
3、),object_ownervarchar2(30),object_namevarchar2(30),object_instanceinteger,object_typevarchar2(30),optimizervarchar2(255),search_columnsinteger,idinteger,parent_idinteger,positioninteger,costinteger,cardinalityinteger,bytesinteger,other_tagvarchar2(255)
4、,partition_startvarchar2(255),partition_stopvarchar2(255),partition_idinteger,otherlong,distributionvarchar2(30));AUTOTRACESQL>setautotraceon;SQL>select*fromdual;D-XExecutionPlan----------------------------------------------------------0SELECTSTATEMENT
5、Optimizer=CHOOSE10TABLEACCESS(FULL)OF'DUAL'Statistics----------------------------------------------------------0recursivecalls0dbblockgets3consistentgets0physicalreads0redosize372bytessentviaSQL*Nettoclient511bytesreceivedviaSQL*Netfromclient2SQL*Netro
6、undtripsto/fromclient0sorts(memory)0sorts(disk)1rowsprocessedSQL>统计信息执行计划结果数据使用Explain1,删除上次解析数据2,执行解析deletefromplan_tablewhereSTATEMENT_ID='testplan';explainplansetSTATEMENT_ID='testplan'forselect*fromdual;3,显示执行计划selectlpad('',5*(level-1))
7、
8、operation
9、operation,options,object_name,cost,positionfromplan_tablestartwithid=0andSTATEMENT_ID='testplan'connectbypriorid=parent_id;第一个执行计划对应SQL语句:select*fromdual;执行计划:怎样看执行计划执行计划其实是一棵树,层次最深的最先执行,层次相同,上面的先执行。显示时已经按照层次缩进,因此从最里面的看起。最后一组就是驱动表。例:驱动表selectcount(*)fr
10、omprm_adjustpricemain,prm_adjustprice_bdetailwheremain.cadjpriceid=detail.CADJPRICEIDandmain.DADJPRICEDATE>='2004-04-18'anddetail.CINVENTORYIDin(selectpk_invmandocfrombd_invmandocwherebd_invmandoc.SEALFLAG='N');表访问方式散列获取:全表扫描:ROWID访问:读取