情况是这样的:
我需要从2000W的表中读数据
对其中一个数据操作(只能写JAVA程序,不能SQL)
然后update目前采用的是按范围读取-------基本上处理10个左右的200W数据
通过ROWNUM读取200W中的各个10W条放入ResultSet
处理放入batch
10W条处理完毕executeBatch()一下
ps:即处理200W数据需要executeBatch() 20次我自己分析了一下,在RS的时候比较慢,update平均100ms
由于是通过java程序对磁盘的读写,所以整体时间较长有没有更好的解决方案啊????大家帮帮忙 谢谢啦
我需要从2000W的表中读数据
对其中一个数据操作(只能写JAVA程序,不能SQL)
然后update目前采用的是按范围读取-------基本上处理10个左右的200W数据
通过ROWNUM读取200W中的各个10W条放入ResultSet
处理放入batch
10W条处理完毕executeBatch()一下
ps:即处理200W数据需要executeBatch() 20次我自己分析了一下,在RS的时候比较慢,update平均100ms
由于是通过java程序对磁盘的读写,所以整体时间较长有没有更好的解决方案啊????大家帮帮忙 谢谢啦
而系统的主要瓶颈就是I/O所以减少I/O所消耗的时间,你的程序就可以提高n倍,所以在取数据时就要尽量精确,尽量取少的数据。而你的问题,2000W条数据你都去了出来,可是你只需要这2000W条数据中的一条对这一条数据进行操作,其他都是无用的数据。这就是你的问题
我解释一下,我是分范围200W一次性取出
我还要对2000W数据都做处理,而不是其中一条做处理
那I/O消耗怎么减少呢?
{ResultSet rs=executeQuery(sql); }???
那样的话,参照我目前系统的内容,我得分200+个范围……我得累死……期待高手救助了!
对SQL优化,减少你需要处理的结果集。