我现在有一个程序非常简单,但处理的数据量非常大,有2000万笔左右,并且每天都要处理。处理的过程是这样:对A表中每一条数据都要进行处理,进行一些简单的运算,再插入到B表中,且A表有一个字段是积数,每次每条都要更新。程序写下来非常简单,但执行时间要近两个小时,即使不更新A表也要1个小时左右,更新的话时间更长,请大家帮我想想办法,谢谢!另:B表我已去掉索引,并且建表时也指定了NOLOGGING,A表我没用WHERE条件,因为用不着,且每条记录都要计算,我现在用的方法是在程序中用游标(我用的Pro*C编写)将A表每条记录取出(一次取5万笔,不能再多,多了就报段错误,不过少一个字段可以每次取20万笔,但效率没有明显提高),然后在一个循环中计算,计算完了再插入B表(由于已经很慢,所以没更新A表)
自己也做过小测试,至少比普通操作快1倍以上,你的数据量大估计效果更明显,再结合/*+ append */使用,效果应该不错的。对A表中每一条数据都要进行处理,进行一些简单的运算
如果真的很简单的话建议楼主用存储过程实现,不要用程序,转来转去还要走网络,不如直接调用存储过程让数据库搞定,效率应该会很高。
我现在用存储过程,你可以分开写,不必都写到一个存储过程,你分析以下,把整个过程 分成一步,两步,三步进行,每一步都传什么参数。2000w对数oracle数据库处理是很简单的
然后写个job每天运行一次。。(速度+愉快)
1.尽量减小事务,如果事务太大将会明显降低效率;
2.尽量减少于数据库的交互,交互很浪费时间的!一些可以用数据库服务器完成的功能尽量用数据库来完成;
3.尽量优化你的SQL语句,不要使用NOT IN 之类的语句~;