美文网首页Java技术
mysql如何批量插入百万数据

mysql如何批量插入百万数据

作者: 有梦想永远年轻 | 来源:发表于2018-12-28 10:35 被阅读0次

    测试过几种方法:

    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如何批量插入百万数据

        本文链接:https://www.haomeiwen.com/subject/hdqslqtx.html