您的位置:首页 > 数据库 > Oracle

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不仅仅是你一个人的事,还会影响别人。

扩展:绑定变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: