基本mybatisplus的sql插入优化处理

SQL的性能测试

BASE:10w条数据

Mysql8.8数据库

ORM框架:MybatisPlus

数据库连接池:Alibaba-Druid

实体类工具:Lombok

开发语言:JAVA

框架:SpringBoot

16G内存,4核8G的处理器

数据库表设计

image-20240518125407184

单个插入

  private void singleSave(List<Student> list) {
   
        long start = System.currentTimeMillis();
        list.forEach(e -> {
   
            studentService.save(e);
        });
        long end = System.currentTimeMillis();
        System.out.println("singleSave消耗时间" + (end - start) + "毫秒");
    }

输出结果:

​ singleSave消耗时间83831毫秒

结论;

​ 能很明显的看出 十万条数据 每一条都一个个插入 这是非常傻逼的操作 花了我们整整84秒的时间 非常弱智的操作

一次批量插入

   private void singleBatch(List<Student> list) {
   
        long start = System.currentTimeMillis();
        studentService.saveBatch(list);
        long end = System.currentTimeMillis();
        System.out.println("singleBatch消耗时间" + (end - start) + "毫秒");
    }

输出结果:

​ singleBatch消耗时间13965毫秒

结论;

​ 从这里我们就可以发现了一点端倪了 这说明dao层操作 真正耗时的可能不是插入操作 而是我们与数据库的网络连接次数

​ 能看到我们只连接一次的情况下 批量插入的时间快了5倍左右 这种性能提升让我豁然开朗,14s左右的时间

多线程单次插入

线程池中20个线程,每个线程每次处理1000个,我们模拟做100次循环

 private void multithreaded_single_insert(List<Student> list) {
   
        ExecutorService executorService = Executors.newFixedThreadPool(20);
        CountDownLatch countDownLatch = new CountDownLatch(100);//做结束收尾
        long begin 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值