本帖最后由 jsyzgygcj 于 2010-12-28 10:33:41 编辑

解决方案 »

  1.   

    数据写入TXT中,用LOAD DATA INFILE导入
      

  2.   

    楼上的方法我也看过,也是需要IO操作,如果数据量只有100条,新建个txt感觉也么必要
      

  3.   

    用INSERT DELAYED ... 插入行被排入队列,当表没有被其它线程使用时,此行被插入。使用INSERT DELAYED的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。
      

  4.   

    如果是innodb存储引擎
    set autocommit = 0
      

  5.   

    程序里面这样写( insert into C(NAME) values ('name1'),('name2'),('name3'),('name4'),('name5');)
      

  6.   

    为了提高插入数据的效率,我们可以利用MySql的批量插入数据能力。其实,从本质来说也就是取消JDBC中事务的自动提交,改为手动提交。 
       如果没有关闭JDBC事务的自动提交,那么JDBC驱动会在每次执行了一条SQL语句之后,自动提交,并且关闭连接。而我们知道打开数据库连接是非常耗资源的,而且有些JDBC框架还会限制数据库操作的频率。这种情况下,如果采用单调数据插入效果非常不好。 
       解决的方法之一,就是关闭JDBC事务的自动提交,改为手动提交。我们可以记录SQL语句的执行次数,然后当达到某一个值的时候,比如10w次的时候,手动提交一下事务,然后关闭并重新开始数据库连接。再进行下一批数据局的插入或者更新。
      

  7.   

    insert into C(NAME) values('abc'), ('abc1'), ,,,,
    可以一条insert语句,插入多条记录。
      

  8.   

    insert into 表名s (a,b,c)selct d,e,f from 表名a
     
      

  9.   

    纠正楼主一些问题:
    1. 你说的第二种方法比第一种方法并不会减少打开和关闭数据库连接的时间。第一种方法完全是可以在一个数据库连接里面来实现的。
    2. 如果有100条数据的话,那么这100条数据的内容是无论如何都要传到数据库里面的,这部分时间节省不了,同样的,写到硬盘的时间也节省不了
    3. 完整的数据库操作流程主要流程包括:建立连接,数据传输,sql优化,数据写入,事务提交,断开连接。所以实际上你这种情况可以优化的地方不外乎数据传输,sql优化,事务提交这三部分
    4. 数据传输最简单的办法就是把程序服务器和数据库服务器放在一个机器上面,至于千方百计的缩短sql大抵不必,因为本身这个环节如果排除网络因素的话,占的时间很少
    5. sql优化部分,就是说自己先把sql优化了,省得服务器再做一次。这个对于select语句作用比较大。像楼主这种问题最简单的就是使用mysql的prepared statement,具体自己查文档了
    6. 事务部分,一个是放在同一个事务里面来处理,另外一个是确认这个表到底是否需要使用事务,如果不需要的话就不要用innodb,这样会快很多