Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69085
  • 博文数量: 17
  • 博客积分: 1461
  • 博客等级: 上尉
  • 技术积分: 163
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-05 13:31
文章分类

全部博文(17)

文章存档

2011年(1)

2010年(16)

分类: Oracle

2010-06-05 12:55:38

    今天看书的时候,看到一个单词“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都是非常大的开销,应尽量避免。
阅读(1483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~