千家信息网

如何理解oracle硬解析、软解析、软软解析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何理解oracle硬解析、软解析、软软解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。硬解析和软解析有相同的一步,而软软解析与硬
千家信息网最后更新 2026年11月01日如何理解oracle硬解析、软解析、软软解析

如何理解oracle硬解析、软解析、软软解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

硬解析和软解析有相同的一步,而软软解析与硬解析、软解析完全不一样。先来说下理论上的东西,然后来做个实验。

硬解析过程:

1.语法、语义及权限检查;

2.查询转换(通过应用各种不同的转换技巧,会生成语义上等同的新的SQL语句,如count(1)会转为count(*));

3.根据统计信息生成执行计划(找出成本最低的路径,这一步比较耗时);

4.将游标信息(执行计划)保存到库缓存。

软解析过程:

1.语法、语义及权限检查;

2.将整条SQL hash后从库缓存中执行计划。

软解析对比硬解析省了三个步骤。

软软解析过程:

要完全理解软软解析先要理解游标的概念,当执行SQL时,首先要打开游标,执行完成后,要关闭游标,游标可以理解为SQL语句的一个句柄。

在执行软软解析之前,首先要进行软解析,MOS上说执行3次的SQL语句会把游标缓存到PGA,这个游标一直开着,当再有相同的SQL执行时,则跳过解析的所有过程直接去取执行计划。

SQL> drop table test purge;
SQL> alter system flush shared_pool;
SQL> create table test as select * from dba_objects where 1<>1;
SQL> exec dbms_stats.gather_table_stats(user,'test');

硬解析:
SQL> select * from test where object_id=20;
未选定行
SQL> select * from test where object_id=30;
未选定行
SQL> select * from test where object_id=40;
未选定行
SQL> select * from test where object_id=50;
未选定行

软解析:
SQL> var oid number;
SQL> exec :oid:=20;
SQL> select * from test where object_id=:oid;
未选定行
SQL> exec :oid:=30;
SQL> select * from test where object_id=:oid;
未选定行
SQL> exec :oid:=40;
SQL> select * from test where object_id=:oid;
未选定行
SQL> exec :oid:=50;
SQL> select * from test where object_id=:oid;
未选定行
软软解析:
SQL> begin
for i in 1..4 loop
execute immediate 'select * from test where object_id=:i' using i;
end loop;
end;
/

SQL> col sql_text format a40
SQL> select sql_text,s.PARSE_CALLS,loads,executions from v$sql s
where sql_text like 'select * from test where object_id%'
order by 1,2,3,4;
SQL_TEXT PARSE_CALLS LOADS EXECUTIONS
---------------------------------------- ----------- ---------- ----------
select * from test where object_id=20 1 1 1
select * from test where object_id=30 1 1 1
select * from test where object_id=40 1 1 1
select * from test where object_id=50 1 1 1
select * from test where object_id=:i 1 1 4
select * from test where object_id=:oid 4 1 4

可以看到软解析与软软解析相比,软软解析只是解析一次。

字段解释:
PARSE_CALLS 解析的次数

LOADS 硬解析的次数

EXECUTIONS 执行的次数




SQL执行过程图如下:






关于如何理解oracle硬解析、软解析、软软解析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

游标 过程 次数 缓存 语义 语句 问题 相同 信息 更多 权限 语法 帮助 检查 生成 解答 不同 易行 最低 简单易行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技产业 互联网科技与金融科技 北京互联网络科技有限公司 丰台科技园 互联网 科技伦理 互联网公司 湖南洣水互联网科技有限公司扣款 青岛科技大学互联网大赛研究生 苏州铭阳互联网科技有限公司 未来五年的互联网科技 洛阳昕诺飞互联网科技有限公司 互联网科技扶贫时间 中国互联网十大科技股排名 徐州市互联网科技有限公司 互联网科技圈年度人物 深圳互联网科技的发展 35岁以上互联网科技行业 互联网科技包装股份有限公司上市 互联网高科技行业有哪些企业 互联网科技职业技能培训学校 什么是科技互联网 互联网科技英文 互联网科技公司有哪些 撒么互联网科技公司 成都玖崟互联网科技有限公司乐商圈怎么样 江苏南京365互联网科技 广州市恰铎互联网科技有限公司 云南省自由互联网科技有限公司 盐城市攀科互联网科技有限公司 杭州科技互联网公司有哪些
0