要求:
1:从一个大概有上千万的表内取出数据;如何取高效。2:如何插入到另一个数据表内。

解决方案 »

  1.   

    如果是从一个表里面取数据有没有太复杂的选择条件的话,我觉得最直接的优化方法就是在选择条件上建立索引了。将选出的结果插入另一个表可以用
    insert into ... select 语句。可以把查询到得结果直接插入目的表。
      

  2.   

    谢谢各位。我是不同的数据库,可以使用insert into ...select ?现在慢,主要是要每条数据都得获取。大家看看有啥好招。谢谢各位了。
      

  3.   

    分段读取,设置游标,读取后能不释放就不释放掉,就像hibernate持久化一样。
    比如开始只需要前50条,就取前50,锁定游标,当有获得50条之后的数据需求的时候,就再次读取,并在原有数据载体基础上追加数据,以此类推。
    当要1次读取10000条以上数据的时候,就用多线程或单线程读取,尽量不要同步程序,取得之后将数据用接口以消息的方式传回。
      

  4.   

    必须用JAVA吗2个数据库的表的格式是否有一样了,如果不一样你在第一个数据库中创建一个临时表(表结构和你第2个数据库的表一样),用存储过程把头一个表的数据存入你的临时表中,然后用工具,显示创建SQL语言(oracle用pl/sql),再把这个SQL语言放在你第2个数据库里执行下,我觉的这样应该最快了
      

  5.   

    用ETL,一直跑。想快速估计是不可能的。
    oracle有ETL工具,SQL Server也有……
      

  6.   

    他的问题是有N多个表,现在他想从N个表中取大量的数据然后放到一张表中。
    没错,就是ETL哦。
      

  7.   

    楼主是要问
    1、如何写高效的sql语句?
    2、还是如何高效的从一个数据库搬迁数据到另一个数据库?
    1、可以去google搜索看看,sql方面的优化有很多内容
    2、你可以先找到目前程序的瓶颈:
    如果你数据库允许长时间链接那么你可以打开一个游标一直读取,不要重复打开游标,写入数据库也同样打开一个游标一直写入,直到全部完成再关闭游标Connection con_src;//源数据库
    Connection con_tag;//目标数据库
    PreparedStatement pstmt_src = con_src.prepareStatemet("select ");
    PreparedStatement pstmt_tag = con_tag.prepareStatemet("insert ");
    ResultSet rs1 = pstmt.executeQuery();while(rs1.next()){
      pstmt_tag.setString(1,rs1.get(1));
      ……
      pstmt_tag.executeUpdate();
    }
    rs1.close();
    pstmt_src.close();
    pstmt_tag.close;
    con_src.close();
    con_tag.close();
      

  8.   

    呵呵!要快的话只能用多线程了,线程分段读取、操作,能充分利用CPU资源。。、