mysql中怎么实现循环批量插入
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,mysql中怎么实现循环批量插入,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数据结构寻思着分页时标准列分主键列、索引列、普通列3种
千家信息网最后更新 2025年02月24日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安全错误
数据库的锁怎样保障安全
树莓派24小时服务器
鹏程杯网络技术大赛
数据库及应用有什么推荐的网课
网络安全进校园主题班会演讲稿
网络技术专业代码
mysql数据库迁移方案
双鸭山软件开发公司电话
建立网络安全信息制度
app软件开发6
asp 提取数据库指定行
网络平台服务器租用多少钱一年
数据库和软件的链接不上去
杭州泉格网络技术有限公司
海南网络安全测评公司
软件开发人员工资免税
redis选择数据库
学习机软件开发
昆山公安局网络安全
阴阳师是不是只有一个大服务器
数据库开发学习网站
IAM网络安全象限
上海摩谱网络技术有限公司
上海凌极网络技术有限公司
软件开发过程中用到的技术
sql语句删除数据库全部表
java怎么存取数组到数据库
长宁区什么是网络技术代理商
我的世界服务器免费租用
服务器虚拟机安装详细教程
网络安全课是什么