资源描述:
《oracle-sql的硬解析和软解析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Oracle-SQL的硬解析和软解析OracleSQL的硬解析和软解析OracleSQL的硬解析和软解析我们都知道在OracleSQL语句在执行之前都需要经过解析中每条,这里而又分为软解析和硬解析。在OracleSQL语句中存在两种类型的,一类为DDL语句(数据定义语言),他们是从来不会共享使用的,也就是每次执行都需要进行硬解析。还有一类就是DML语句(数据操纵语言),他们会根据情况选择要么进行硬解析,要么进行软解析。操作:插入、更新、删除、选择通过创建,下降,改变一SQL解析过程。OracleSQL将进行几
2、个步骤的处理过程对此:1、语法检查(syntaxcheck):检查此SQL的拼写是否语法。2、语义检查(semanticcheck):诸如检查SQL语句中的访问对象是否存在及该用户是否具备相应的权限。3、对SQL语句进行解析(阶段):利用内部算法对SQL进行解析,生成解析树(ParseTree)及执行计划(执行计划)。4、执行SQL,返回结果(executeandreturn)-O解析过程详解2.1语法检测判断一条SQL语句的语法是否符合SQL的规范,比如执行:SQL>;选择*ftomemp;我们就可以看
3、出由于选择关键字少了一个“C,这条语句就无法通过语法检验的步骤了&rdquOo2.2语义检查语法正确的SQL语句在解析的第二个步骤就是判断该SQL语句所访问的表及列是否准确用户是否有权限访问或更改相应的表或列比如如下语句??:SQLSELECT*fromemp>;SELECT*fromemp*erroratlinel:ora-00942:tableorviewdoesnotexist由于查询用户没有可供访问的EMP对象,因此该SQL语句无法通过语义检查。2.3解析(解析)2.3.lparse主
4、要分为三种:1、HardParse(硬解析)2、softparse(软解析)3、softsoftparse(好像有些资料中并没有将这个算在其中)HardParse:就是上面提到的对提交的SQL完全重新从头进行解析(当在sharedpool中找不到时候将会进行此操作),总共有一下5个执行步骤:1:语法分析2:权限与对象检查3:在共享池中检查是否有完全相同的之前完全解析好的。如果存在,直接跳过4和5,运行SQL,此时算softparseo4:选择执行计划5:产生执行计划注:创建解析树、生成执行计划对于SQL的执行
5、来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。这就是在很多项冃中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。SoftParse:ifyoufindtheexactsameSqlinSharedPool,andparsethegoodresults,you,11skipthenexttwostepsintheHardParse・SoftSoftParse:actually,whensessioncursorcacheissetthisparam
6、eter,CursorisdirectlyinthecurrentSessionCachePGA,inlheanalysisofthetimeneedforthesyntaxanalysis,afterpermissionobjectanalysiscangotoPGAsearch,iffoundexactlythesameCursor,youcandirectlygettheresult,itistoachievetheSoftSoftParse・Thestepsof2.3.2parsingcanbediv
7、idedintotwosteps:1)verifythattheSQLstatementisexactlythesame・Inthisstep,OraclewillusetheHASHfunctiontopasstheincomingSQLstatementtotheHASHvalue,andthencompareitwiththeHASHvalueoftheexistingstatementinthesharedpooltoseeifthereisaone-to-onecorrespondence・TheH
8、ASHvalueoftheSQLstatementinanexistingdatabasecanbeobtainedbyaccessingtheHASH_VALUEcolumninthedatadictionarysuchasv$sql,v$sqlarea,andv$sqltext・IftheHASHvalueoftheSQLstatementisconsistent,thentheORACLEac