1. 写法最最简单, 需要插入多少次数据库就for多少次数据库
(然后讲个笑话)
废话不多说 看代码:
/**
* 一条一条插入 测试10万数据用时差距
*/
@Test
void testMillionCount2(){
long startTime = System.currentTimeMillis();
for (long i = 0L; i<100000L; i++){
AixiBuildDamaged dl = new AixiBuildDamaged();
dl.setReceptionId(i);
dl.setImg("https://aisce-root.oss-cn-beijing.aliyuncs.com/img/2022/5/14/dzyStorekeeperOSS/49e7a5fa-2566-40e5-92a3-4ec48cf7ba6a.jpg");
dl.setCreateTime(new Date());
dl.setDelFlag(1);//默认的 这版本获取不到数据库默认值
aixiBuildDamagedMapper.insert(dl);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime +" ms");
}
->笑话: 博客都快写完了 它还在执行....
如果要是有1亿个订单 新增 , 估计一年后才能看到去年的订单
我算了一下, 执行10万的新增
一秒20条左右 预计1.3889小时结束十万数据
计算: 100000/20/60/60 ≈1.3889小时
一张图看到结果: 一秒实际11条左右 到不了20条(别试了太磨叽了)
2. mybatis plus的批量新增方法
insertBatchSomeColumn()
还有第二种方式 实现: session 等待补充
使用及配置方法: 点击跳转->
上测试代码:
/**
* 测试批量添加十万数据(内存操作)
*/
@Test
void testMillionCount() {
long startTime = System.currentTimeMillis();
//破损图片插入破损表
List<AixiBuildDamaged> damagedList = new ArrayList<>();
for (long i = 0L; i < 100000L; i++) {
AixiBuildDamaged dl = new AixiBuildDamaged();
dl.setReceptionId(i);
dl.setImg("https://aisce-root.oss-cn-beijing.aliyuncs.com/img/2022/5/14/dzyStorekeeperOSS/49e7a5fa-2566-40e5-92a3-4ec48cf7ba6a.jpg");
dl.setCreateTime(new Date());
dl.setDelFlag(1);//默认的 这版本获取不到数据库默认值
damagedList.add(dl);
}
if (!aixiBuildDamagedMapper.insertBatchSomeColumn(damagedList))
throw new ConstructionServiceException("添加破损图片失败, 请重试!!!");
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime + " ms");
执行结果: 具体看电脑性能 42.758秒)
数据量小的时候 没啥感觉 但是 当数据量大的时候 差距天壤之别
总结:
一条一条插入: 一秒20条(略低)左右 预计1.3889小时结束十万数据
一次插入: 总耗时: 42.758秒 ->10万数据