jdbc批量插入实现大批量数据快速插入
2016-03-10 23:26
288 查看
今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入。于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch()。我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料。于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit(false);然后再preparedStatement.executeBatch()之后,再执行con.commit();于是再试,什么叫奇迹?就是刚刚导入这些数据花了半小时,而加了这两句话之后,现在只用了15秒钟就完成了。于是去查查了原因,在网上发现了如下一段说明:
* When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that
requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with
SET autocommit and COMMIT statements:
SET autocommit=0;
... SQL import statements ...
COMMIT;
第一次,正是因为没有setAutoCommit(false);那么对于每一条insert语句,都会产生一条log写入磁盘,所以虽然设置了批量插入,但其效果就像单条插入一样,导致插入速度十分缓慢。
部分代码如下:
* When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that
requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with
SET autocommit and COMMIT statements:
SET autocommit=0;
... SQL import statements ...
COMMIT;
第一次,正是因为没有setAutoCommit(false);那么对于每一条insert语句,都会产生一条log写入磁盘,所以虽然设置了批量插入,但其效果就像单条插入一样,导致插入速度十分缓慢。
部分代码如下:
相关文章推荐
- 专注做事,竟然也成为我们的稀缺能力 [20160310]
- 读《我是IT小小鸟》有感
- Win8 Tomcat安装及环境变量配置
- MAC OSX10.10上搭建Apache,PHP,MySQL5.6.22,phpMyAdmin开发环境
- 穷举法和迭代法
- ASP.NET 5
- Maven中的import scope.
- Eclipse快捷键大全
- Eclipse快捷键大全
- Building COM Objects in C#
- BeanFactory和ApplicationContext实例化Bean 的不同
- Makefile
- 代理模式
- iOS两个关于对象的关键字
- 首次在公司内部的分享
- UVa 1354 Mobile Computing[暴力枚举]
- leetcode:Valid Palindrome 【Java】
- ajax地址三级联动下拉表
- A. Robot Sequence
- 结构体对齐详解http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html