加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle绑定变量类型和长度引起的执行计划变化

发布时间:2020-12-12 13:32:23 所属栏目:百科 来源:网络整理
导读:在Oracle数据库中执行SQL语句,当客户端发出一条语句交付到ORACLE,会进行以下几个步骤: 1、语法检查(syntax check) 检查此sql的拼写是否语法。 2、语义检查(semantic check) 诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。 3、对sql语

在Oracle数据库中执行SQL语句,当客户端发出一条语句交付到ORACLE,会进行以下几个步骤:

1、语法检查(syntax check)
检查此sql的拼写是否语法。
2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)

其中,软、硬解析就发生在第三个过程里。

如果使用了绑定变量,且绑定变量类型一直未变话,则通常只在第一次运行的时候进行一次硬解析(优化器创建解析树、生成执行计划),后续都是软解析(将此SQL和cache中的进行比较,如果相同,取已生成的执行计划),创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。

本范例想说明:即便语句完全相同,但是如果绑定变量的类型发生了变化的话,也会发生硬解析.

?

--建立测试表
create table TESTBIND
(
  aaa CHAR(10),bbb CHAR(100),ccc CHAR(2000)
)


--清理缓存
ALTER SYSTEM FLUSH SHARED_POOL;
alter system flush BUFFER_CACHE;
建立测试表并清空缓存

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读