我现在有一个程序非常简单,但处理的数据量非常大,有2000万笔左右,并且每天都要处理。处理的过程是这样:对A表中每一条数据都要进行处理,进行一些简单的运算,再插入到B表中,且A表有一个字段是积数,每次每条都要更新。程序写下来非常简单,但执行时间要近两个小时,即使不更新A表也要1个小时左右,更新的话时间更长,请大家帮我想想办法,谢谢!另:B表我已去掉索引,并且建表时也指定了NOLOGGING,A表我没用WHERE条件,因为用不着,且每条记录都要计算,我现在用的方法是在程序中用游标(我用的Pro*C编写)将A表每条记录取出(一次取5万笔,不能再多,多了就报段错误,不过少一个字段可以每次取20万笔,但效率没有明显提高),然后在一个循环中计算,计算完了再插入B表(由于已经很慢,所以没更新A表)
解决方案 »
- Oracle多表查询问题。。。外键什么的求解答,表创建得有问题。。。
- plsql生成的log文件找不到 [40分]
- 这个procedure编译时没错,但执行时出错,这是为什么?请高手们HELP
- 数据库是 9I的啊 wmsys.wm_concat 这个方法 在9I能好用么?
- 困饶了一天的问题:往oracle插入数据时
- ODBC访问ORACLE数据库执行带输出参数的存储过程,c#端访问怎么做~~~~~~·
- 大家帮忙看下我的视图哪里有错?
- 安装完ORACLE登陆时的问题
- 项目开始动作了,我该从何入手来设计数据库了,请大家交流交流呀!!!
- 求问cursor为什么没有执行循环体的代码?
- 指定表的rowid格式转换
- oracle replace 函数用法 可以这样写吗?(replace('234*5555','5555','aaaa')),*为任何字符?
自己也做过小测试,至少比普通操作快1倍以上,你的数据量大估计效果更明显,再结合/*+ append */使用,效果应该不错的。对A表中每一条数据都要进行处理,进行一些简单的运算
如果真的很简单的话建议楼主用存储过程实现,不要用程序,转来转去还要走网络,不如直接调用存储过程让数据库搞定,效率应该会很高。
我现在用存储过程,你可以分开写,不必都写到一个存储过程,你分析以下,把整个过程 分成一步,两步,三步进行,每一步都传什么参数。2000w对数oracle数据库处理是很简单的
然后写个job每天运行一次。。(速度+愉快)
1.尽量减小事务,如果事务太大将会明显降低效率;
2.尽量减少于数据库的交互,交互很浪费时间的!一些可以用数据库服务器完成的功能尽量用数据库来完成;
3.尽量优化你的SQL语句,不要使用NOT IN 之类的语句~;