楼主: jxc_hn

请比较一下pro*c和存储过程的效率。

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
11#
发表于 2002-10-14 12:02 | 只看该作者

btw:

有一些空间或者时间的损耗
要承认我们可以避免
但这个问题并不会让我们感觉到差异的话,就不是重要的非解决不可的问题

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:342012新春纪念徽章
日期:2012-01-04 11:49:54
12#
发表于 2002-10-14 14:31 | 只看该作者
faint,写了一堆都没了,现在只好长话段说了.个人看法:,存储过程是PL/SQL的代码编译后存在oracle中,可以通过多种方法调用,而PRO*C则是一个C的接口.可以说一般情况下是没有人会在存储过程调用c的方法的(虽然oracle提供这种调用的方法,但我还没看见谁用过),而PRO*C则可以调用存储过程.所以我的看法pro*c和存储过程是一个调用和被调用的关系,没有效率比较的问题.比如这是有以前写的一段pro*c的代码是把所有的PL/SQL代码全写在了我的PRO*C中,如下:
就是把下段代码中的        EMS_DEQUEUE(:msginfo);
部分全用PL/SQL写在PRO*C中.
...........
后来的写法
int
MsgReceiver::StartMsg()
{
EXEC SQL BEGIN DECLARE SECTION;
           VARCHAR msginfo[200];  
EXEC SQL END DECLARE SECTION;

//Because the msginfo is the output variable,so shall set the max length of the string.
msginfo.len=200;
bool loopflag=true;

EXEC SQL WHENEVER SQLERROR DO MsgError();
while(loopflag)
        {
          EXEC SQL EXECUTE
          
       BEGIN
        EMS_DEQUEUE(:msginfo);
           END;
          
          END-EXEC;

      msginfo.arr[msginfo.len]='\0';
          if(!strcmp((char*)msginfo.arr,"Stop")
                  loopflag=false;                                      
      else
        printf(msginfo);
          //MsgFunction();
        }
return 1;        
}
也就是说如过能用存储过程实现就用它来实现再通过PRO*C 调用就可以了,无论如何存储过程做同样的事情应该效率要高一些,只有那写不容易用存储过程来实现的,比如复杂的比较,或交互操作就用PRO*C,两者是个补充关系,没有比较关系.

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
13#
 楼主| 发表于 2002-10-15 08:42 | 只看该作者
我指的比较是指同一各业务逻辑用两种方法实现的性能比较。
我认为还是有区别的。

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:342012新春纪念徽章
日期:2012-01-04 11:49:54
14#
发表于 2002-10-15 09:09 | 只看该作者
对啊,我的观点就是能用存储过程来实现就应该用存储过程来实现,尤其是大数据量处理的情况下.无论PRO*C再怎么快,它的程序只是一个ORACLE的客户端,数据的传输(从server到client的buffer)就会花费很多时间的,它的速度比起在server端直接执行而不需要网络传输的过程肯定是要慢的.

使用道具 举报

回复
论坛徽章:
0
15#
发表于 2002-10-15 14:50 | 只看该作者

同意楼上的观点!

顶一下

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
发表于 2002-10-15 15:33 | 只看该作者
pl/sql 还是能做很多事的,一般的业务都能做到,能用pl/sql 的还用pro c干吗?
同意uje 的看法!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
17#
发表于 2002-10-15 15:43 | 只看该作者
除了一些很少的核心的,并发粒度很高的,难道语言的执行效率真的有怎么重要!?

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
18#
 楼主| 发表于 2002-10-15 15:48 | 只看该作者
to uje:
我以前一直就用存储过程,对于大数据量的倒换(在库中各表之间转换)性能很好,但不代表pro*c性能比它差。
你说的情况是指window 客户端的pro*c吧?我没用过,我一直以来都是在Unix平台开发。一般来说pro*c所在
的机器就是oracle服务器,所以不存在你说的问题。
话又说回来,由于后台业务逻辑交互性差的特点,我们一般不会用存储过程和pro*c来进行大量的网络数据传输,
而是在后台操作数据,只把结果返回给调用者。

如果业务逻辑主要是计算密集型的,pro*c的优越性会大大超过存储过程,所以我的观点是:除非业务逻辑是
表之间数据大量倒换操作,才选择存储过程。

我选择pro*c的理由:
        1。 c程序的高性能有目共睹。
        2。 三层结构的要求业务逻辑从数据库中移出来。
        3。 一些特殊功能需要和操作系统交互,用C更方便。比如后台处理时间较长,可以通过往文件写日志来获知进度。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
19#
发表于 2002-10-15 15:49 | 只看该作者
PLSQL与PROC应该有各自的定位,交叉的很少,我们认为相同的业务当然可以使用相同的方式但是在实际的操作中肯定有一种最合理的方式(微观:( ^_^ )

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
20#
 楼主| 发表于 2002-10-15 15:55 | 只看该作者
其实我出道以来就是写存储过程。那时用notepad啊。

真羡慕现在写存储过程的,有pl/sql developer 这么好的工具。

但现在倾向于写pro*c了, 三层结构的中间层(tuxedo 的 service, J2EE 的 EJB)都用来实现业务逻辑了, 数据库的作用是只保留
数据,大势所趋啊。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表