oracle 语句解析过程,ORACLE之SQL语句内部解析过程【weber出品】

一、客户端通过监听连接到数据库,数据库开启一个server process进程来接收客户端传过来的sql。

1.这条sql语句从来都没有被执行过。(硬解析)

2.这条sql语句被执行过。(软解析)

二、我们来看一条SQL语句内部解析到底经历了什么?

20181010142331646222.png

sql硬解析解析的步骤

1.语法检测:检测sql语句有没有语法错误,是否符合sql规范

2.语义检测:检测sql语句涉及的对象是否存在。

3.检查共享池中是否存在相同的已经执行过的sql语句。

4.通过数据字典的统计信息,来计算最优执行计划。

sql软解析解析的步骤

1.语法检测:检测sql语句有没有语法错误,是否符合sql规范

2.语义检测:检测sql语句涉及的对象是否存在。

3.检查共享池中是否存在相同的已经执行过的sql语句。如果有,则直接使用执行计划

三、检查共享池中是否存在相同的已经执行过的sql语句的方法:

1.将sql文本转换成ASCII值,再将ASCII值通过hash函数转换成hash值,根据计算出来的hash到library cache中的chain链上去找到对于的bucket.比较bucket是否存在这条sql语句。至于library cache 的内部是使用链的数据结构的形式来管理内存的,library cache里面有很多的chain链,每个链上又挂着很多的bucket。bucket里面存放的是sql语句文本,执行计划等。

20181010142331959710.png

原文:http://www.cnblogs.com/yaoweber/p/4020926.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值