你的问题我再开发过程中同样到过,我当时数据大概是六百多万条记录吧,同样单独执行内部过程看起来很快,但是有时候就很慢,先说解决办法:
你需要对你的表根据查询条件设计相应的索引,有时候根据需要可能一个表你需要建立好几个索引都是有可能的。然后再执行,你会发现原来要30几秒的现在零点几秒就可以搞定了,这跟使用游标没什么关系。游标的使用完全由你的应用需要决定,我相信能不用的你肯定不会选择使用游标处理,一般是实在没办法的情况下才选择游标去做。
你查询慢的原因是你在存储过程中执行的话,没有索引时,他会一条一条查知道把80几万条数据全部扫描一遍直到查完了你才看到一个结果,但是你在外面单独执行很快的原因是plsql他会首先去查查到几条数据就先给你返回来,所以你马上就看到结果了,但实际上查询也并没有结束,你要是数据很多的情况下你往下拉,你会发信很慢,其实查询过程根本就还没有结束。
总之写存储过程第一步是会写,第二步是要做好优化,否则当你的数据量很大的时候你的过程写的不好的话问题会马上暴露出来。
游标本来就很耗性能,尽量查询出来后在程序中处理吧