ORACLE的硬解析和软解析

oralce中有硬解析和软解析的概念,为了能够理解好这两个概念,我们先引入oralce是怎么执行SQL的

oracle在执行SQL的时候有如下步骤:

1 语法检查,例如SQL的拼写

2 语义检查,例如sql中的对象是否存在及相关的权限

3 sql解析,对sql进行语法解析,生成解析树及执行计划

3.1 硬解析 包括语法和语义分析,查看共享池是否有解析好的结果,然后选择执行计划和生成执行计划,执行sql

3.2 软解析,如果在共享池中有解析好的结果,直接执行sql

创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。

3.3 其中查看共享池的部分涉及到利用sql的哈希值和共享池中的哈希值做比较,这些比较包括大小写,字符串一致性,空格,注释

4 执行sql

这里再插入一个绑定变量的概念

绑定变量简单点理解就是在sql语句中的参数的地方使用一个占位符

select * from emp where empno=7788    --未使用绑定变量
select * from emp where empono=:eno   --:eno即为绑定变量
减少 SQL 语句的硬解析,从而减少因硬解析产生的额外开销 ( CPU,Shared pool,latch) 。其次提高编程效率,减少数据库的访问次数。

另外,有一点要注意一下,DDL每次都是硬解析,dml会走软解析

参考文档:

http://blog.csdn.net/robinson_0612/article/details/6195483

http://blog.csdn.net/tianlesoftware/article/details/5458896

http://cjjwzs.iteye.com/blog/1010263

总结一下,硬解析会占用大量资源,应该尽量避免,绑定变量可以一定程度的避免硬解析

转载于:https://my.oschina.net/zimingforever/blog/94976

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值