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 ;
相关推荐
Amber_372 小时前
mysql 死锁场景 INSERT ... ON DUPLICATE KEY UPDATE
数据库·mysql
VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue敬老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
文刀竹肃3 小时前
DVWA -SQL Injection-通关教程-完结
前端·数据库·sql·安全·网络安全·oracle
思成不止于此4 小时前
【MySQL 零基础入门】MySQL 约束精讲(一):基础约束篇
数据库·笔记·sql·学习·mysql
ActionTech4 小时前
SCALE | SQLFlash 在 SQL 优化维度上的表现评估
数据库·sql
老华带你飞4 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
逐梦吧!旅行者5 小时前
Linux MySQL 5.7用户管理与用户密码的设置问题
linux·mysql
NaiLuo_455 小时前
MySQL基本查询
数据库·mysql
刺客xs5 小时前
MYSQL数据库------多表查询
数据库·mysql