Mybatis plus批量插入的优化

目录

1 前言

2 优化

2.1 逐条的插入

2.1.1 java的代码如下

2.1.2 耗时

2.1.3 优化

2.2 批量编译再插入

2.2.1 java的代码如下

2.2.2 耗时

2.2.3 疑问

2.2.4 优化

2.3 真-批量插入


1 前言

数据库的常见操作无非增删查改,当有大量数据需要插入的时候,无疑需要耗费大量的时间,此时性能的优化就极为重要,接下来我将逐步讲解如何优化效率。

2 优化

2.1 逐条的插入

2.1.1 java的代码如下

@Test
void testSaveOneByOne() {//其它代码...for (int i = 1; i <= 100000; i++) {//创建并插入UseruserService.save(buildUser(i));}
}

2.1.2 耗时

我们可以看到,逐条插入耗费了大量的时间。

2.1.3 优化

如果使用批量插入将会明显要比逐条插入快许多,这是因为逐条插入每次需要向数据库中提交请求,提交到Mysql然后执行,这个操作是需要耗时间的。而我们以1000个为一批提交请求,这就大大节省了提交请求所耗的时间。如下。

2.2 批量编译再插入

2.2.1 java的代码如下

void testSaveBatch() {for (int i = 1; i <= 100000; i++) {//其它代码...if (i % 1000 == 0) {//1000个为一批的插入userService.saveBatch(list);}}
}

2.2.2 耗时

我们可以看到,耗时已经减少很多了,但是还能再优化。 

2.2.3 疑问

这难道还能优化?使用Mybatis的时候为什么没这种问题?为什么呢?

这是因为我们这里使用的是Mybatis plus直接给我们提供的方法,而不是我们自己手写的方法,我们一般会使用<foreach>来达到如下的效果:

insert into user(xxx)
values(xx),(xx);

这样就是真正的批量插入,一批只需要执行一次 。

而使用Mybatis plus自动给的方法,则只是批量传到Mysql,执行仍然是一条一条执行的,所以速度还没达到极致。

2.2.4 优化

不过上述情况也不能怪Mybatis plus,这是因为我们在Mysql中没开启一个参数,使得Mybatis plus的功能受到了限制,一旦开启,就能做的真正的批量插入了。

2.3 真-批量插入

在application.yml配置文件中,开启参数(rewriteBatchedStatements=true),然后使用Mybatis plus直接给我们提供的批量插入即可。

spring:datasource:url: jdbc:mysql://localhost:3306/xxx?rewriteBatchedStatements=true

耗时:

直接秒了,家人们 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/500058.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…

qt学习:实战 记事本 + 快捷键 + 鼠标滚轮 + 打开读取写入关闭文件

目录 功能 步骤 配置ui界面 添加图片资源 添加头文件和定义成员数据和成员函数 在构造函数里初始化 增加当前字体大小函数 减小当前字体大小函数 在用户按下 Ctrl 键的同时滚动鼠标滚轮时&#xff0c;执行放大或缩小操作 多选框变化后发出信号绑定槽函数来改变编码 …

鸿蒙ArkTs开发问题总结

版本问题 现阶段鸿蒙ArkTs开发主要分为两个版本 HarmonyOS3.x.x(API9)及HarmonyOS4.x.x(API10) 一下简称为 API9,API10 官方现在所有案例均以 HarmonyOS4.x.x(API10) 为基础请注意选择分支 API9&HarmonyOS3.x.x 鸿蒙开发编译器默认下载的为public版本SDK不是全量SDK需要…

高光谱遥感学习入门丨高光谱数据处理基础、Python和Matlab高光谱遥感数据处理

目录 ①Python高光谱遥感数据处理与高光谱遥感机器学习方法深度应用 ②Matlab高光谱遥感、数据处理与混合像元分解实践技术应用 ③高光谱遥感数值建模技术及在植被、水体、土壤信息提取领域应用 更多应用 高光谱遥感信息对于我们认识世界具有重要意义。尽管大部分物质在人眼…

Google Genie:创意互动环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

经典DP-最长单调子序列

最长递增子序列 思路 定义状态&#xff1a; 我们定义一个数组 dp&#xff0c;其中 dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度。初始化状态&#xff1a; 对于数组中的每个元素 nums[i]&#xff0c;初始时都可以被视为一个长度为1的递增子序列&#xff0c;因此 dp[i] 的…

2.29IO进程线程

编写链表&#xff0c;链表里面随便搞点数据 使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中 使用 fscanf 读取文件中的数据&#xff0c;写入链表中 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h>typed…

“集世界精华·展中国风采”2024北京智能科技展会(世亚智博会)

在科技的浪潮中&#xff0c;中国犹如一艘乘风破浪的巨轮&#xff0c;稳健地航行在广阔的海洋上。随着科技的飞速发展&#xff0c;中国正逐渐成为全球科技领域的一面旗帜&#xff0c;引领着世界科技潮流。在这个伟大的时代&#xff0c;中国以卓越的科技创新能力和前瞻的战略视野…

vue-electron 项目创建记录及注意事项

vue-electron 项目创建记录及注意事项 1、使用vue ui或者命令行创建vue项目 2、添加electron插件 3、安装element-plus: npm install --save element-plus 4、修改配置文件如下图: vue.config.js增加配置&#xff1a; pluginOptions:{ electronOutput: { contextIsolation…

WiFi模块引领智能家居革命:连接未来的生活

随着科技的快速发展&#xff0c;智能家居正成为现代生活的一部分&#xff0c;极大地改变了我们与家庭环境互动的方式。其中&#xff0c;WiFi模块作为关键的连接技术&#xff0c;在推动智能家居革命中发挥着不可忽视的作用。本文将深入探讨WiFi模块如何驱动智能家居革命。 设备互…

Linux——haproxy搭建Web群集

一、haproxy概述 HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP的应用代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种负载均衡解决方案。适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器&#xff0c;防止内部服务器遭受攻…

TVM 和模型优化的概述(1)

文章目录 1. 从 Tensorflow、PyTorch 或 Onnx 等框架导入模型&#xff08;model&#xff09;。2.翻译成 Relay3. lower 到 张量表达式。4. 使用 auto-tuning 模块 AutoTVM 或 AutoScheduler 搜索最佳 schedule。5. 选择最佳配置进行模型编译。6. lower 到 TIR。7. 编译成机器码…