今天看书的时候,看到一个单词“parse tree”,当时没有理解,上网查了一下资料,记录一下!
parse tree直译过来就是解析树的意思,在Oracle中,解析树有两种,一种是硬解析,一种是软解析,想要弄清楚这两种解析之间的区别,首先要弄明白用户提交一条sql语句时的执行过程,当用户提交一条sql语句给oracle时,Oracle要执行如下步骤:
1。语法检查 检查sql语句的语法是否正确
2。语义检查 检查sql语句涉及到的访问对象是否存在以及该用户是否具备相应的权限
3。解析sql语句 生成解析树及执行计划
4。执行sql返回结果
重点来了,软解析和硬解析就是发生在第三个步骤,Oracle用内部算法取得该sql的hash值,并在library cache中查找,是否有该hash值,然后用该hash值存在,则此时就将该sql和和library cache中的sql进行比较,如果相同,就利用library cache中已有的解析树和执行计划,省略了优化器的工作,这个就是软解析。如果该hash值在library cache中不存在或者虽然存在,但是sql和和library cache中的sql不同,那么优化器就将创建解析树和生成执行计划,此过程为硬解析。
创建解析树和生成执行计划对于sql都是非常大的开销,应尽量避免。
阅读(1506) | 评论(0) | 转发(0) |