实体表

刚开始在Java代码层面批量插入
for (int i = 1; i <1000000 ; i++) { Orders orders=new Orders(); orders.
setAmount(i); orders.setPid(i); orders.setSno(i); ordersService.save(orders); }
结果插入特别的慢,可惜没统计时间,大概几分钟了还在5万条左右。
我估计是我这么操作,每次都要创建连接,连接关闭,交给mysql一条条执行导致大量的数据库连接以及IO操作,太慢了。

然后我想着把它放到一个集合里面,调用批处理。
List<Orders> list=new ArrayList<>(1000000); for (int i = 1; i <1000000 ; i++) {
Orders orders=new Orders(); orders.setAmount(i); orders.setPid(i); orders.setSno
(i); list.add(orders); } ordersService.saveBatch(list);
结果感觉比之前快了几倍,但还是慢。
改进用存储过程
drop PROCEDURE if exists test_insert; delimiter // CREATE PROCEDURE test_insert
(n int) begin declare v int default 1; SET AUTOCOMMIT=0; while v < n do insert
into orders values(v,v,v,v); set v = v + 1; end while; SET AUTOCOMMIT=1; end //
调用

30秒左右百万数据就插入了

还有一个想法就是直接循环拼接到一条sql里面,然后insert执行。这样就只有一次连接。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信