目前有个SQL的疑问,还望各位CSDN的朋友帮忙分析下:现在数据库(ORACLE)里面有两个表table1、table2(他们的表结构完全一样),我需要将table2的数据全部插入到table1中。目前SQL会有两种写法(功能通过J2EE在WEB上实现):1)直接使用 JDBC 调用 : insert into table1 select * from table22) 通过Iterator(迭代器),封装成多条insert into table1 values(?,?,?)语句   例如:table2有一万条记录,那么就通过一万个 " insert into table1 values(?,?,?) " 完成此功能。考虑的数据库的压力、以及程序的性能等方面,欢迎大家一起探讨下。

解决方案 »

  1.   

    可以用Union组合成一个完整的语句 一次执行。。 还可以用 JDBC AddBath()
      

  2.   

    1)直接使用 JDBC 调用 : insert into table1 select * from table2 在ORACLE上面,我执行过,我的ORACLE是高性能版本的,100多万条数据,1.6秒。用的是高性能的服务器。很快。 
      

  3.   

     1)直接使用 JDBC 调用 : insert into table1 select * from table2这个好。方法二是“出口转内销”,java程序从数据库取出数据,又传回去,增加网络IO,增加多余的处理步骤。方法一Oracle直接完成
      

  4.   

    当然insert into table1 select * from table2 好了,把操作交给数据库来处理,没有必要再经过java的处理。直接由数据库来处理肯定消耗最少。
      

  5.   


    insert into table1 select * from table2 
    楼主说的两种方法肯定是这种快些啊第二种
    你看看如果数据多了  要insert多少次?
      

  6.   

    insert into table1 select * from table2 
    要快些。。
      

  7.   

    直接使用 JDBC 调用 : insert into table1 select * from table2 这个是最快的,也是最底层的。
      

  8.   

    首先感谢各位CSDN上的朋友。我担心的是,如果使用的是方法1:insert into table1 select * from table2 那么这个SQL,在数据库里的执行过程是怎么样的?需要先select * from table2 做为临时表吗?1)如果使用临时表,那么select * from table2做为临时表时,假设table2有100-200个字段,百万级别甚至千万级别的数据量。这个临时表未免太大了吧?select * from table2可能会造成数据库假死。2)如果不使用临时表,那么insert into table1 select * from table2 在oracle中低层是如何执行的?
      

  9.   


    这个方法不太实际吧?如果有1千万条数据,那么Union组合成一个完整的语句 ,这个语句的长度都可能是天文数字了吧?!另外JDBC AddBath()没用过,望赐教
      

  10.   


    这个方法不太实际吧?如果有1千万条数据,那么Union组合成一个完整的语句 ,这个语句的长度都可能是天 文数字了吧?!另外JDBC AddBath()没用过,望赐教
      

  11.   

    insert into table1 select * from table2 这个快。如果数据量很大的话,可以写一个存储过程分批操作,在数据库中直接运行的肯定不会比经过java程序的慢
      

  12.   

    当然是直接在数据库端执行 insert into table1 select * from table2 要快