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,再次查询,长度发生变化了,再次执行批量插入,就不会报错了。

你可能感兴趣的:(mysql如何批量插入百万数据)