mysql存入百万级数据速度慢的解决方法

来源:互联网 发布:以色列 军事 知乎 编辑:程序博客网 时间:2024/06/06 07:01

       最近公司分配了一个任务,测试一个向数据库存入千万级数据工具的效率及所存在的问题。于是乎首先测试已存在的工具的存取效率,结果如下:

       mysql 数据库:

                              1万条数       据耗时8分钟

                              5万条数       据耗时42分钟

       远程连接oracle数据库:

                              5万条数据    耗时7分14秒
                             10万条数据   耗时14分27秒
                             20万条数据   耗时33分24秒
                             40万条数据   耗时1时零3分28秒

效率都惨不忍睹,数据量还没上百万级,已经耗时一小时以上了,于是采取措施,改原来的一条条数据插入,为一组组数据插入:

   conn.setAutoCommit(false);
   String sql = "插入语句”;
   PreparedStatement pst = conn.prepareStatement(sql);
   pst.setObject(1, "");  
   pst.addBatch();

   pst.setObject(2, "");
   pst.addBatch();

   ...........

   pst.executeBatch();  //500条为一组,进行一次提交
   pst.close();
   conn.commit();

使用executeBatch()方法后,效率有了质的飞跃,结果如下:

     mysql数据库:

                           5万条数据:   15秒
                          100万条数据: 4分49秒
                          1000万条数据:47分31秒

     远程oracle数据库:
                          100万条数据: 平均耗时1分20秒
                          1000万条数据:24分10秒
   两种数据库均在一小时内完成了千万级数据插入!

原创粉丝点击