mysql如何批量插入百万数据

测试过几种方法:

1.使用mybatis框架插入,十万条数据大概需要6分钟(不推荐)

2.用jdbc插入,20万条数据只需要8s,推荐

下面说一下使用jdbc插入:

编写一个测试类:

public class insetrt {

     private Stringurl ="jdbc:mysql://localhost:3306/taotao?rewriteBatchedStatements=true"; 

     private Stringuser ="root";

     private Stringpassword ="123";

@Test

    public void jdbcInsert(){

        Connection conn =null;

        PreparedStatement pstm =null;

        ResultSet rt =null;

try {

       Class.forName("com.mysql.jdbc.Driver");

       conn = (Connection) DriverManager.getConnection(url,user,password);

       String sql ="INSERT INTO tab_user2(id,user_name,age,job,sal) VALUES(null,?,60,'演员',?)";

       pstm = (PreparedStatement) conn.prepareStatement(sql);

       long start = System.currentTimeMillis();

       for (int i =0; i <200000; i++) {

           pstm.setString(1,"周润发"+i);

           pstm.setDouble(2,300000+i);

           pstm.addBatch();

}

pstm.executeBatch();

long end = System.currentTimeMillis();

System.out.println("用时:"+(end-start));

}catch (Exception e) {

      e.printStackTrace();

}finally {

    if (conn!=null){

        try {

          conn.close();

        }catch (Exception e) {

          e.printStackTrace();

}

}

          if (pstm!=null){

              try {

               pstm.close();

               }catch (Exception e) {

              e.printStackTrace();

          }

       }

     }

   }

}

注意黑色加粗部分,rewriteBatchedStatements=true 开启批量插入,插入只执行一次,所有插入比较快

修改mysql的max_allowed_packet,如果jdbc最大连接包太小,会报错,所以需要修改

修改步骤如下:

1. show VARIABLES like '%max_allowed_packet%'; 执行语句查询最大包长度

2. set global max_allowed_packet = 300*1024*1024;执行语句设置最大包长度,改为300M

再次查询,会发现长度变了

max_allowed_packet   314572800

如果修改不成功,在mysql文件下找到my.ini文件,在【mysqlId】下添加一个配置:

max_allowed_packet = 300M

最后重启mysql,再次查询,长度发生变化了,再次执行批量插入,就不会报错了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 先创建服务端的APP 1.官网下载Winrun4j。http://winrun4j.sourceforge.net...
    Alex_1799阅读 2,106评论 1 2
  • 本文内容 1.什么是JDBC以及为什么要使用JDBC 2.JDBC核心API的讲解 3.使用JDBC核心API进行...
    Vincilovfang阅读 1,367评论 0 11
  • 26岁,你看着身边的人都结了婚 婚礼的份子钱逐年递增 春节回家,父母从带你串亲戚 变成了带你去见相亲对象 见了十几...
    你那么美365阅读 264评论 0 0
  • 如果语言失去了深度 爱情也疲倦的闭上了眼睛 那这这一生的奔跑 总该在天黑前歇脚吧 尽管那些炙手可热的字句 还在相互...
    暗香舒袖阅读 530评论 5 8

友情链接更多精彩内容