情况是这样的:
我需要从2000W的表中读数据
对其中一个数据操作(只能写JAVA程序,不能SQL)
然后update目前采用的是按范围读取-------基本上处理10个左右的200W数据
通过ROWNUM读取200W中的各个10W条放入ResultSet
处理放入batch
10W条处理完毕executeBatch()一下
ps:即处理200W数据需要executeBatch() 20次我自己分析了一下,在RS的时候比较慢,update平均100ms
由于是通过java程序对磁盘的读写,所以整体时间较长有没有更好的解决方案啊????大家帮帮忙 谢谢啦

解决方案 »

  1.   

    java程序怎么写,最终也是底层要用sql,顶多就是你用那个框架,而这个框架把sql封装了起来。
    而系统的主要瓶颈就是I/O所以减少I/O所消耗的时间,你的程序就可以提高n倍,所以在取数据时就要尽量精确,尽量取少的数据。而你的问题,2000W条数据你都去了出来,可是你只需要这2000W条数据中的一条对这一条数据进行操作,其他都是无用的数据。这就是你的问题
      

  2.   

    对fenshen的回答,先谢过。
    我解释一下,我是分范围200W一次性取出
    我还要对2000W数据都做处理,而不是其中一条做处理
    那I/O消耗怎么减少呢?
     {ResultSet rs=executeQuery(sql); }???
      

  3.   

    为什么不考虑用存储过程做呢?为什么要用Java做?
      

  4.   

    我有一个笨方法:将范围取的更精确,减少ResultSet数量(10W一个范围)!
    那样的话,参照我目前系统的内容,我得分200+个范围……我得累死……期待高手救助了!
      

  5.   

    最佳方案就是用SQL(或者存储过程)直接执行,大不了几个SQL做成一个事物。用程序处理,必然会遇到IO的瓶颈。可以考虑多线程处理,也许会快一点。
      

  6.   

    ResultSet rs=executeQuery(sql); 
    对SQL优化,减少你需要处理的结果集。