oracle编程入门笔记2015-01-13--数据库原理1之硬解析软解析
2015-01-13 17:56
531 查看
上次说到oracle会有一个共享池,里面保存了最近执行的sql以及解析过的代码。
如果sql执行过,那么在共享池里面就会有保存,下次执行同样的sql就不需要解析,直接执行就可以了。如果第一次执行,或者之前的执行记录被后面的覆盖了,那么就要重新解析。
硬解析:一切从头开始,包括语法,语义,权限分析工作,但是这个过程是数据库后台进程操作的。我们看不见,但是相当耗费事。具体怎么查看后台的解析过程,请参见
http://tech.ccidnet.com/art/1105/20061220/982081_1.html 查看sql扩展执行计划。贴一张图感性认识一下,下面是一个硬解析所进行的操作,查了后台很多表。
软解析:直接从共享池里面获取执行代码,不需要解析。
那么oracle怎么确定一条sql是否已经存在于共享池?
首先SQL提交到oracle解析,oracle首先根据sql生成sql_id和hash_value。sql_id比hash_value出现重复的概率会低,基本不会重复。
所以只要有sql要执行,就会比较有没有重复的sql_id,如果有就不需要解释了。直接找到执行就好了。
那么直观上怎么判断一个sql是否一样呢,1.sql大小写完全一样 2.注释一样 3.如果有传入参数,要么使用绑定变量,要么传入值一样。满足三点的sql对数据库告诉缓存而言才是一样的sql。
结论:你写的sql不仅仅是你一个人的事,还会影响别人。
扩展:绑定变量
如果sql执行过,那么在共享池里面就会有保存,下次执行同样的sql就不需要解析,直接执行就可以了。如果第一次执行,或者之前的执行记录被后面的覆盖了,那么就要重新解析。
硬解析:一切从头开始,包括语法,语义,权限分析工作,但是这个过程是数据库后台进程操作的。我们看不见,但是相当耗费事。具体怎么查看后台的解析过程,请参见
http://tech.ccidnet.com/art/1105/20061220/982081_1.html 查看sql扩展执行计划。贴一张图感性认识一下,下面是一个硬解析所进行的操作,查了后台很多表。
软解析:直接从共享池里面获取执行代码,不需要解析。
那么oracle怎么确定一条sql是否已经存在于共享池?
首先SQL提交到oracle解析,oracle首先根据sql生成sql_id和hash_value。sql_id比hash_value出现重复的概率会低,基本不会重复。
所以只要有sql要执行,就会比较有没有重复的sql_id,如果有就不需要解释了。直接找到执行就好了。
那么直观上怎么判断一个sql是否一样呢,1.sql大小写完全一样 2.注释一样 3.如果有传入参数,要么使用绑定变量,要么传入值一样。满足三点的sql对数据库告诉缓存而言才是一样的sql。
结论:你写的sql不仅仅是你一个人的事,还会影响别人。
扩展:绑定变量
相关文章推荐
- oracle编程入门笔记2015-01-12--数据库原理1
- oracle编程入门笔记2015-01-28--model子句原理
- oracle编程入门笔记2015-01-14--查询转换
- oracle编程入门笔记2015-01-19--表连接
- oracle编程入门笔记2015-01-30--model子句性能
- oracle编程入门笔记2015-01-25--浅说cube
- 《Oracle Golden Gate 概念和原理》-新手入门->深入解析->图文
- oracle编程入门笔记2015-01-17--一个例子告诉你共享池和数据缓存对效率的影响
- oracle编程入门笔记2015-01-22--解释计划
- 笔记:深入解析MapReduce架构设计与实现原理 第3章 MapReduce编程模型
- oracle编程入门笔记2015-01-06--基本概念
- oracle编程入门笔记2015-01-08--查询
- oracle编程入门笔记2015-01-19--四种表连接
- 数据库编程实战:Oracle PL/SQL入门之案例实践
- oracle编程入门笔记2015-01-10--更新,删除
- Oracle笔记(3):数据库启动原理
- oracle编程入门笔记2015-01-12--数据合并
- oracle编程入门笔记2015-01-26--分析函数使用举例
- oracle编程入门笔记2015-01-23--执行计划