目前面临着一个项目需求,是用java做的,针对500W条记录数据存放在外部文本文件中,需要高效的插入到数据库中某个表中(比如说test表中),最容易想到的方式先把数据某一条记录读入到bufferReader中,然后执行insert语句插入到test表中,但是由于数据量很大,这样做效率极差,不知道有没有一种高效的方法使得文本中所有的数据均插入到该表中。(本人知道要进行sql优化,但是不是太理想,想听听高手们是如何解决的)。

解决方案 »

  1.   

    不知道你文本文件的数据时什么样的格式
    如果是统一的那就还好办 否则就....
    aaa,bbb,ccc
    123,344,444
    ...
    看下这个
    http://free-bird816.javaeye.com/blog/441238
      

  2.   

    外部表和sqlldr的原理是一样的,不过外部表要方便些。
      

  3.   

    这个插入500w的数据到某张表是每天都做得么?
    一次性的工作,就不要特别在意性能了,能做好就行了。
    如果这个工作特别频繁,可以自己写程序多线程并发,每个线程取3k-5k的数据,至于需要多少个线程,这个就需要根据服务器的配置,如内存,CPU,等等设置,达到系统最大的吞吐量即可。
      

  4.   

    别让你的java程序做这些,直接将文件传输到数据库服务器,用oracle自己的工具导入。
      

  5.   

    外部表
    并行
    APPEND
    NOLOGGING
      

  6.   

    导入数据楼上的说了,
    我想也就是外部表和SQLLoader
    另外,追求效率的话,要关闭日志,去掉索引和尽可能消除外键的限制。
      

  7.   

    如果对数据有信心,就把各种索引外键日志等等的操作全去掉,然后PARALLEL,APPEND,速度还可以的。我们上一个项目每天晚上跑流程,都是几百W数据搬来搬去。