深入Oracle--浅谈Oracle的解析机制与MySQL查询缓存  

本帖最后由 lee 于 2020-6-23 17:40 编辑

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语句中的参数的地方使用一个占位符

1select*fromempwhereempno=7788   --未使用绑定变量

2select*fromempwhereempono=:eno  --:eno即为绑定变量


减少SQL语句的硬解析,从而减少因硬解析产生的额外开销(CPU,Shared pool,latch)。其次提高编程效率,减少数据库的访问次数。
另外,有一点要注意一下,DDL每次都是硬解析,dml会走软解析


-------------------------------------------------------------------------------------------------------------------------


游客,如果您要查看本帖隐藏内容请回复








标签: 暂无标签
lee

写了 77 篇文章,拥有财富 653,被 13 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P3 | 发表于 2023-12-13 20:08:33
21123dsaqweqewwq
回复

使用道具

P3 | 发表于 2023-8-4 17:47:56
谢谢老师分享
回复

使用道具

P3 | 发表于 2023-6-27 12:31:33
感谢分享                        
回复

使用道具

P3 | 发表于 2023-3-14 13:43:22
fffffffffffffssdfsffdfd
回复

使用道具

P3 | 发表于 2022-10-14 19:19:33
学习学习
回复

使用道具

P3 | 发表于 2021-12-15 16:09:51
DDL每次都是硬解析,DML会走软解析?
回复

使用道具

P3 | 发表于 2021-12-8 19:50:16
1234567890-
回复

使用道具

P3 | 发表于 2021-11-9 15:48:48
thank you for shared
回复

使用道具

P4 | 发表于 2021-9-22 17:06:10
ooooooooooooooooooo
回复

使用道具

P3 | 发表于 2021-9-17 17:40:54
学习学习
回复

使用道具

123下一页
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈