用mysql批量插入百万数据

实体表
用mysql批量插入百万数据_第1张图片

刚开始在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秒左右百万数据就插入了
用mysql批量插入百万数据_第2张图片

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

你可能感兴趣的:(数据库)