给你 2 万条数据,怎么快速导入到 MySQL?写得太好了!
关注Java核心技术,推送更多 Java 干货!
来源:blog.csdn.net/kisscatforever/article/details/79817039
一、前言
前两天做了一个导入的功能,导入开始的时候非常慢,导入2w条数据要1分多钟,后来一点一点的优化,从直接把list怼进Mysql中,到分配把list导入Mysql中,到多线程把list导入Mysql中。
时间是一点一点的变少了。非常的爽,最后变成了10s以内。
下面就展示一下过程。
二、直接把list怼进Mysql
推荐一个 Spring Boot 基础教程及实战示例:
https://github.com/javastacks/spring-boot-best-practice
Mapper.xml
底层的mapper是通过逆向工程来生成的,批量插入如下,是拼接成类似:insert into tb_enroll_student()values (),()…….();
关注Java核心技术,推送更多 Java 干货!
这样的缺点是,数据库一般有一个默认的设置,就是每次sql操作的数据不能超过4M。这样插入,数据多的时候,数据库会报错Packet for query is too large (6071393 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.,
虽然我们可以通过
类似 修改 my.ini 加上 max_allowed_packet =67108864
,67108864=64M
,默认大小4194304 也就是4M
修改完成之后要重启mysql服务,如果通过命令行修改就不用重启mysql服务。最新 MySQL 面试题整理好了,点击小程序在线刷题。
完成本次操作,但是我们不能保证项目单次最大的大小是多少,这样是有弊端的。所以可以考虑进行分组导入。
三、分组把list导入Mysql中
再次改进,使用多线程分批导入。最新多线程面试题整理好了,点击小程序在线刷题。
四、多线程分批导入Mysql
五、小结
通过使用这个操作真是不断的提高了,项目使用技巧也是不错。
加油~~ 多线程哦~~
最近好文分享
1.
2.
3.
4.
5.