vlambda博客
学习文章列表

给你 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 干货!给你 2 万条数据,怎么快速导入到 MySQL?写得太好了!

这样的缺点是,数据库一般有一个默认的设置,就是每次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 =6710886467108864=64M,默认大小4194304 也就是4M

修改完成之后要重启mysql服务,如果通过命令行修改就不用重启mysql服务。最新 MySQL 面试题整理好了,点击小程序在线刷题。

完成本次操作,但是我们不能保证项目单次最大的大小是多少,这样是有弊端的。所以可以考虑进行分组导入。

三、分组把list导入Mysql中

 
 

再次改进,使用多线程分批导入。最新多线程面试题整理好了,点击小程序在线刷题。

四、多线程分批导入Mysql

 
 

五、小结

通过使用这个操作真是不断的提高了,项目使用技巧也是不错。

加油~~ 多线程哦~~

最近好文分享


1.

2.

3.

4.

5.

更多请关注 • Java核心技术
点击阅读原文获取免费资料~