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 ;
相关推荐
MM_MS1 分钟前
Halcon控制语句
java·大数据·前端·数据库·人工智能·算法·视觉检测
薛定谔的猫19824 分钟前
LlamaIndex(三) LlamaHub工具集
数据库·mysql·llamahub
小画家~16 分钟前
第四十六: channel 高级使用
java·前端·数据库
晴天¥21 分钟前
了解Oracle中的体系结构
数据库
DemonAvenger27 分钟前
Redis慢查询分析与优化:性能瓶颈排查实战指南
数据库·redis·性能优化
Li_yizYa28 分钟前
Redis-常见数据类型及应用场景
java·数据库·redis
尽兴-41 分钟前
SQL 执行失败如何回滚?事务已提交还能恢复吗?——MySQL 误操作数据恢复全指南
sql·mysql·binlog·undolog·redolog
瀚高PG实验室1 小时前
逻辑导入导出(pg_dump/pg_restore)用法2-导入到不同的schema或tablespace
数据库·瀚高数据库
heze091 小时前
sqli-labs-Less-6自动化注入方法
mysql·网络安全·自动化
whyfail1 小时前
前端数据存储新选择:IndexedDB与Dexie.js技术指南
前端·javascript·数据库