Mysql使用存储过程快速添加百万数据的示例代码

 更新时间:2021年08月23日 11:13:04   作者:jeremylai  
这篇文章主要介绍了Mysql使用存储过程快速添加百万数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数据,用时大概4个小时。
创建一个用户表

CREATE TABLE `t_sales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
  `password` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '密码 MD5存储',
  `register_time` timestamp NULL DEFAULT NULL COMMENT '注册时间',
  `type` int(1) DEFAULT NULL COMMENT '用户类型 1,2,3,4 随机',
  PRIMARY KEY (`id`),
  KEY `idx_username` (`username`) USING BTREE
)

然后创建存储过程,批量添加数据。

  • 用户名以常量和数字拼接
  • 密码是MD5密码
  • 注册时间是当前时间随机往前推几天
  • type是取1-4随机范围值
create procedure salesAdd()
begin 
 declare i int default 11;
   while i <= 4000000 do
         insert into blog.t_sales
         (`username`,`password`,`register_time`,type) values
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         set i = i + 1; 
   end while; 
end

然后调用存储过程

call salesAdd()

改进版

虽然使用存储过程添加数据相对一个个添加更加便捷,快速,但是添加几百万数据要花几个小时时间也是很久的,后面在网上找到不少资料,发现mysql每次执行一条语句都默认自动提交,这个操作非常耗时,所以在在添加去掉自动提交。设置 SET AUTOCOMMIT = 0;

create procedure salesAdd()
begin 
 declare i int default 1;
 set autocommit = 0;   
   while i <= 4000000 do
         insert into blog.t_sales
         (`username`,`password`,`register_time`,type) values
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         set i = i + 1; 
   end while;
 set autocommit = 1;     
end

执行时间387秒,约为六分钟,其中还有一半时间用于md5、随机数的计算。

[SQL]
call salesAdd();
受影响的行: 0
时间: 387.691s

到此这篇关于Mysql使用存储过程快速添加百万数据的文章就介绍到这了,更多相关Mysql添加百万数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql联合查询UNION和Order by同时使用报错问题的解决办法

    Mysql联合查询UNION和Order by同时使用报错问题的解决办法

    很多朋友刚使用联合查询UNION的时候常常会理所当然的将联合查询理解为把没一个子查询的结果集组合成一个大的结果集
    2014-04-04
  • MySQL主从同步、读写分离配置步骤

    MySQL主从同步、读写分离配置步骤

    根据要求配置MySQL主从备份、读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记
    2012-03-03
  • mysql中关于between和in的区别

    mysql中关于between和in的区别

    这篇文章主要介绍了mysql中关于between和in的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL优化常用的19种有效方法(推荐!)

    MySQL优化常用的19种有效方法(推荐!)

    关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂,下面这篇文章主要给大家介绍了关于MySQL优化常用的19种有效方法,需要的朋友可以参考下
    2022-03-03
  • MySQL ERROR 2013 (HY000)错误解决方法

    MySQL ERROR 2013 (HY000)错误解决方法

    这篇文章主要介绍了MySQL ERROR 2013 (HY000)错误解决方法,错误提示全文ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104,需要的朋友可以参考下
    2015-01-01
  • Centos7 安装mysql 8.0.13(rpm)的教程详解

    Centos7 安装mysql 8.0.13(rpm)的教程详解

    这篇文章主要介绍了Centos7 安装mysql 8.0.13(rpm)的教程详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • M1芯片安装mysql8.0数据库的实现步骤(图文)

    M1芯片安装mysql8.0数据库的实现步骤(图文)

    这篇文章主要介绍了M1芯片安装mysql8.0数据库的实现实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MySQL如何添加外键

    MySQL如何添加外键

    MySQL是一种常用的关系型数据库管理系统,它支持外键的添加,本文主要介绍了MySQL如何添加外键,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Mysql添加联合唯一索引及相同数据插入报错问题

    Mysql添加联合唯一索引及相同数据插入报错问题

    这篇文章主要介绍了Mysql添加联合唯一索引及相同数据插入报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 详解MYSQL中重命名procedure的一种方法

    详解MYSQL中重命名procedure的一种方法

    这篇文章主要介绍了MYSQL中重命名procedure的一种方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05

最新评论