前言:
现时朋友们对“易语言sql数据库批量添加数据”大致比较关心,各位老铁们都需要知道一些“易语言sql数据库批量添加数据”的相关资讯。那么小编同时在网络上网罗了一些有关“易语言sql数据库批量添加数据””的相关文章,希望朋友们能喜欢,你们快快来了解一下吧!前言
用过Mybatis-Plus的小伙伴一定知道他有很多API提供给我们使用,真爽,再不用写那么多繁琐的SQL语句,saveBatch是Plus的批量插入函数,大家平时工作肯定都用过,下面我们就来一个案例进入今天的主题。
一、rewriteBatchedStatements参数
MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL,另外这个选项对INSERT/UPDATE/DELETE都有效
添加rewriteBatchedStatements=true这个参数后的执行速度比较:
二、批量添加员工信息1.普通saveBatch批量插入
我们循环1万次,把每个实例员工对象装到员工集合(List)中,然后调用Mybatis-Plus的saveBatch方法,传入List集合,实现批量员工的插入,然后我们在方法开始结束的地方,计算当前函数执行时长。
@PostMapping("/addBath")@ResponseBodypublic CommonResult<Employee> addBath(){ long startTime = System.currentTimeMillis(); List<Employee> list = new ArrayList<>(); // 循环批量添加1万条员工数据 for (int i = 0; i < 10000; i++) { Employee employee = new Employee(); employee.setName("DT测试"+i); employee.setAge(20); employee.setSalary(9000D); employee.setDepartmentId(i); list.add(employee); } boolean batch = employeeService.saveBatch(list); if(batch){ long endTime = System.currentTimeMillis(); System.out.println("函数执行时间:" + (endTime - startTime) + "ms"); return CommonResult.success(); } return CommonResult.error();}
为了测试的细致,我多点了几下这个方法,下面是每次记录的时长:
批量添加1万条员工数据,测试结果如下:
第一次:(2秒多)
第二次:(接近2秒)
第三次:(接近2秒)
差不多添加1万条数据在2秒左右,这个时候我们再加大量10万条,再测试:
批量添加10万条员工数据,测试结果如下:
第一次:(19.341 秒)
第二次:(18.298 秒)
顿时我傻了,10万条数据批量添加要20秒左右,这要是再加个10万条,那不崩掉,于是我就各种找解决方案,最后锁定一个数据库连接的属性rewriteBatchedStatements,下面我们就添加上该属性试试速度与激情。
2.设置rewriteBatchedStatements=true批量插入
下面我们为数据库的连接加上rewriteBatchedStatements=true的属性,再测试批量加入的耗时。
rewriteBatchedStatements=true
批量添加1万条员工数据,测试结果如下:
质的飞跃啊!牛逼,可以看出批处理的速度还是非常给力的。
1万条数据:2s -->>> 0.5s
批量添加10万条员工数据,测试结果如下:
效果惊呆了吧???直接起飞啊。
1万条数据:20s -->>> 5s
总结
所以,如果你想验证rewriteBatchedStatements在你的系统里是否已经生效,记得要使用较大的batch,以上就是我的这次总结了,如果有更好的,或者更专业的记得留下你的指教呀~
标签: #易语言sql数据库批量添加数据