首页 新闻 会员 周边

oracle存储过程执行速度很慢是什么原因

0
悬赏园豆:40 [已解决问题] 解决于 2012-07-16 20:39

我用pl/sql写了一个存储过程,内容是通过一个游标,从一个80万行的表中查出大概二十多行的数据,然后用游标的loop end loop块内对每行进行处理,整个过程在pc机上执行了9秒钟,但是如果只执行游标中的查询语句,查出这二十多行数据室很快的,不到1秒就全部查询完了。

请问这是什么原因呢,查出数据很快,但逐行对数据进行简单的处理要耗时这么久么?

MicroMean的主页 MicroMean | 初学一级 | 园豆:138
提问于:2011-09-09 10:32
< >
分享
最佳答案
-2

你的问题我再开发过程中同样到过,我当时数据大概是六百多万条记录吧,同样单独执行内部过程看起来很快,但是有时候就很慢,先说解决办法:

你需要对你的表根据查询条件设计相应的索引,有时候根据需要可能一个表你需要建立好几个索引都是有可能的。然后再执行,你会发现原来要30几秒的现在零点几秒就可以搞定了,这跟使用游标没什么关系。游标的使用完全由你的应用需要决定,我相信能不用的你肯定不会选择使用游标处理,一般是实在没办法的情况下才选择游标去做。

 

你查询慢的原因是你在存储过程中执行的话,没有索引时,他会一条一条查知道把80几万条数据全部扫描一遍直到查完了你才看到一个结果,但是你在外面单独执行很快的原因是plsql他会首先去查查到几条数据就先给你返回来,所以你马上就看到结果了,但实际上查询也并没有结束,你要是数据很多的情况下你往下拉,你会发信很慢,其实查询过程根本就还没有结束。

 

总之写存储过程第一步是会写,第二步是要做好优化,否则当你的数据量很大的时候你的过程写的不好的话问题会马上暴露出来。

收获园豆:40
张宏龙 | 菜鸟二级 |园豆:274 | 2011-09-27 00:44
其他回答(1)
0

游标本来就很耗性能,尽量查询出来后在程序中处理吧

artwl | 园豆:16736 (专家六级) | 2011-09-09 10:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册