背景
需要Mock100万数据到数据库。
逐条插入
如果一条一条的插入,模拟1000条,花费了8秒,100万的话,大约花费3个小时,太慢。
批量插入
问题出现
1000条一次进入插入。
consoleLogger.info("This Batch, {}, Time start : {}", batchTotal, s);
orderMapper.batchInsert(orderList);
consoleLogger.info("This Batch, {}, Time elapsed : {}", batchTotal, System.currentTimeMillis() - s);
按照理论,应该比逐条快很多,但是,结果花费了14秒,非常奇怪,开始查找原因。
求助Google
看到两篇有价值的帖子:
http://www.cnblogs.com/aicro/p/3851434.html
http://blog.jobbole.com/85657/
试着改成100条一个批次,很神奇,1000条数据插入,10个循环,总计60毫秒就完成了。难道用MyBatis操作MySQL数据库的批量操作,对于10条一批和1000条一批,性能差别这么大?
不可理解,本着根本上解决问题的思路,继续追根溯源。
加Log
<logger