软解析和硬解析的问题

zhanghengbo 2010-04-08 10:20:35
今天在看一本oracle的书,说到软解析会比硬解析效率更高,并且差别比较大,但是我分别用两段sql测试了下,并没有什么区别,反而结果显示硬解析的效率稍微高一点点。。。,下面是我用的例子;
--硬解析
declare
begin
for kk in 1 .. 10000 loop
insert into zhb_test_1 (str1) values (kk);
end loop;
end;

--软解析
declare
v_str varchar2(10);
begin
for kk in 1 .. 10000 loop
execute immediate 'insert into zhb_test_1 (str1) values (:v_str)'using kk;

/*execute immediate 'insert into zhb_test_1 (str1) values ('|| kk||')';
*/end loop;
end;

我试着把10000这个数字改成50000和100000,但是结果并不是我想像的那样随着数量的增多而体现软解析的优势,那么到底是什么原因呢 ?
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghengbo 2010-04-12
  • 打赏
  • 举报
回复
Oracle 8.1.6 增加了新的参数CURSOR_SHARING=FORCE 。如果你愿意,这个特性会实现一个自动绑定器(auto-binder)。如果有一个查询编写为 SELECT COUNT(*) FROM EMP WHERE EMPNO =1234,自动绑定器会把它改写成 SELECT COUNT(*) FROM EMP WHERE EMPNO =:X 。这能大大减少硬解析数。
zhanghengbo 2010-04-08
  • 打赏
  • 举报
回复
谢谢2楼3楼,明白了些

动态SQL的效率无法同直接SQL相比
tangren 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhangcunhua 的回复:]
应用绑定变量就会软解析???
[/Quote]
是的
cyousor 2010-04-08
  • 打赏
  • 举报
回复
应用绑定变量就会软解析???
kingkingzhu 2010-04-08
  • 打赏
  • 举报
回复
declare
begin
for kk in 1 .. 10000 loop
insert into zhb_test_1 (str1) values (kk);
end loop;
end;
好像oracle会自动解析为 insert into zhb_test_1 (str1) values (:kk);
tangren 2010-04-08
  • 打赏
  • 举报
回复
楼主的比较方式有误,动态SQL的效率无法同直接SQL相比,
应该写成这样,比较试试看
--硬解析
DECLARE
BEGIN
FOR kk IN 1 .. 10000 LOOP
EXECUTE IMMEDIATE 'INSERT INTO zhb_test_1 (str1) VALUES (''' || kk || ''')';
END LOOP;
END;

--软解析
DECLARE
v_str VARCHAR2(10);
BEGIN
FOR kk IN 1 .. 10000 LOOP
EXECUTE IMMEDIATE 'insert into zhb_test_1 (str1) values (:v_str)'
USING kk;
END LOOP;
END;
Dave 2010-04-08
  • 打赏
  • 举报
回复

看下他们的Hash值 是否相同.

Oracle SQL的硬解析和软解析
http://blog.csdn.net/tianlesoftware/archive/2010/04/07/5458896.aspx



------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧