mysql批量插入数据如何更快

背景:

有个需求,需要向数据库插入300万数据,测试一个性能

这里使用存储过程来循环插入

先看第一次的插入,非常慢,十分钟只写入十几万条

sql 复制代码
delimiter $$
create procedure auto_insert1()
BEGIN
    declare i int default 1;
    while(i<3000000)do
        insert into s1 values(i,'chens','male',concat('chens',i,'@qqcom'));
        set i=i+1;
        select concat('chens',i,'_ok');
    end while;
END$$
delimiter ;

再来看下面的,利用事务批量提交,30秒钟全部插入完成

sql 复制代码
DELIMITER $$
CREATE PROCEDURE auto_insert1()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE batch_size INT DEFAULT 10000;
    DECLARE max_i INT DEFAULT 3000000;
    
    SET autocommit = 0;
    
    START TRANSACTION;
    
    WHILE i < max_i DO
        INSERT INTO s1 VALUES(i, 'chens', 'male', CONCAT('chens', i, '@qqcom'));
        SET i = i + 1;
        
        IF i % batch_size = 0 THEN
            COMMIT;
            START TRANSACTION;
        END IF;
    END WHILE;
    
    COMMIT;
    
    SET autocommit = 1;
END$$
DELIMITER ;
相关推荐
m0_733565465 分钟前
golang如何使用Wails开发桌面应用_golang Wails桌面应用开发步骤
jvm·数据库·python
huangliang070317 分钟前
MySQL 中的 distinct 和 group by 哪个效率更高?
android·数据库·mysql
duke86926721419 分钟前
C# 文件上传的服务器端加密 C#如何在存储到S3或Azure Blob时启用加密
jvm·数据库·python
yoyo_zzm22 分钟前
ThinkPHP1.X核心特性解析
数据库·spring boot·nginx
云边有个稻草人39 分钟前
金仓数据库标量子查询消除:解决复杂SQL性能瓶颈
数据库·sql·性能调优·金仓数据库·kes·标量子查询·数据库内核
小杍随笔43 分钟前
【LiteAdmin(sql-admin)项目前后端架构深度分析】
数据库·sql·架构·rust
C137的本贾尼1 小时前
CRUD 入门:数据的增、查、改、删
mysql
2301_808414381 小时前
MySQL中的复合查询和索引
数据库·mysql
我也不曾来过11 小时前
MYSQL的基本查询
数据库·mysql
czhc11400756631 小时前
数据库517 数据注入
数据库