mysql中怎么实现循环批量插入
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,mysql中怎么实现循环批量插入,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数据结构寻思着分页时标准列分主键列、索引列、普通列3种
千家信息网最后更新 2025年01月20日mysql中怎么实现循环批量插入
mysql中怎么实现循环批量插入,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
数据结构
寻思着分页时标准列分主键列、索引列、普通列3种场景,所以,测试表需要包含这3种场景,建表语法如下:
drop table if exists `test`.`t_model`;Create table `test`.`t_model`( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `uid` bigint COMMENT '业务主键', `modelid` varchar(50) COMMENT '字符主键', `modelname` varchar(50) COMMENT '名称', `desc` varchar(50) COMMENT '描述', primary key (`id`), UNIQUE index `uid_unique` (`uid`), key `modelid_index` (`modelid`) USING BTREE) ENGINE=InnoDB charset=utf8 collate=utf8_bin;
为了方便操作,插入操作使用存储过程通过while循环插入有序数据,未验证其他操作方式或循环方式的性能。
执行过程
1、使用最简单的方式直接循环单条插入1W条,语法如下:
drop procedure if exists my_procedure; delimiter //create procedure my_procedure()begin DECLARE n int DEFAULT 1; WHILE n < 10001 DO insert into t_model (uid,modelid,modelname,`desc`) value (n,CONCAT('id20170831',n),CONCAT('name',n),'desc'); set n = n + 1; END WHILE;end// delimiter ;
插入1W条数据,执行时间大概在6m7s,按照这个速度,要插入1000W级数据,估计要跑几天。
2、于是,构思加个事务提交,是否能加快点性能呢?测试每1000条就commit一下,语法如下:
delimiter //create procedure u_head_and_low_pro()begin DECLARE n int DEFAULT 17541; WHILE n < 10001 DO insert into t_model (uid,modelid,modelname,`desc`) value (n,CONCAT('id20170831',n),CONCAT('name',n),'desc'); set n = n + 1; if n % 1000 = 0 then commit; end if; END WHILE;end//delimiter ;
执行时间 6 min 16 sec,与不加commit执行差别不大,看来,这种方式做批量插入,性能是很低的。
3、使用存储过程生成批量插入语句执行批量插入插入1W条,语法如下:
drop procedure IF EXISTS u_head_and_low_pro;delimiter $$create procedure u_head_and_low_pro()begin DECLARE n int DEFAULT 1; set @exesql = 'insert into t_model (uid,modelid,modelname,`desc`) values '; set @exedata = ''; WHILE n < 10001 DO set @exedata = concat(@exedata,"(",n,",","'id20170831",n,"','","name",n,"','","desc'",")"); if n % 1000 = 0 then set @exesql = concat(@exesql,@exedata,";"); prepare stmt from @exesql; execute stmt; DEALLOCATE prepare stmt; commit; set @exesql = 'insert into t_model (uid,modelid,modelname,`desc`) values '; set @exedata = ""; else set @exedata = concat(@exedata,','); end if; set n = n + 1; END WHILE;end;$$ delimiter ;
关于mysql中怎么实现循环批量插入问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
循环
数据
方式
性能
语法
过程
问题
场景
时间
更多
存储
帮助
测试
解答
易行
普通
有序
简单易行
不大
业务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
六度人和软件开发
鄂州服务器回收怎样收费
网络技术注册哪类商标
幼儿教案网络安全教育
数据库 关系一定要有属性吗
现在剑三大服务器
工商银行软件开发部工作时间
阿里巴巴网络技术有限公司内部
网络安全知识竞选题
2021亚洲网络安全大会时间
网络安全 教材
现代软件开发技术小结报告
国际铁路交通和事故数据库
蓝海互联网科技公司的崛起
虹口区口碑好的软件开发收费标准
软件开发技术人员如何考核
消防安全网络安全课总结
服务器硬盘灯亮一定有硬盘吗
阿里云服务器1核2g也太卡了吧
网络安全密码毕业论文
丽水市网络安全指挥中心
服务器安全狗病毒库
软件开发算哪个专业
智能巡检软件开发怎么收费
江苏宿迁网络技术学院
sql数据库入门基础知识下载
黑龙江专业网络技术服务价目表
湖州常用网络技术
在网吧如何连接云服务器
波中小学生家庭教育与网络安全