前言

为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数据,用时大概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使用存储过程快速添加百万数据的更多相关文章

  1. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]

    使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...

  2. ASP.NET MVC用存储过程批量添加修改数据

    用Entity Framework 进行数据库交互,在代码里直接用lamda表达式和linq对数据库操作,中间为程序员省去了数据库访问的代码时间,程序员直接可以专注业务逻辑层的编写.但是对于比较复杂的 ...

  3. MySQL 快速添加百万条数据

    需要向数据库添加100W条测试数据,直接在普通表中添加速度太慢,可以使用内存表添加,然后将内存表数据复制到普通表 创建表 # 内存表 DROP TABLE IF EXISTS `test_memory ...

  4. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL

    MySQL GUI Tools中的MySQL Migration Toolkit可以非常方便快捷的将Oracle数据导到MySQL中,该软件可以在http://dev.mysql.com/downlo ...

  5. Mysql利用存储过程插入400W条数据

    CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...

  6. Mysql利用存储过程插入500W条数据

    比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入. 创建表 /*部门表*/ CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUT ...

  7. 使用MySQL Migration Toolkit快速导入Oracle数据

    近来笔者有项目需要将原有的Oracle数据库中的数据导入到MySQL中,经过试用发现MySQL GUI Tools中的MySQL Migration Toolkit可以非常方便快捷的将Oracle数据 ...

  8. mysql+php+pdo批量添加大数据

    1.使用insert into插入 ini_set('max_execution_time','0');//限制超时时间,因为第一种时间较长,索性设为0不限制 $pdo = new PDO(" ...

  9. 使用JDBC在MySQL数据库中快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...

随机推荐

  1. 确保 PHP 应用程序的安全 -- 不能违反的四条安全规则(转)

      规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数 ...

  2. buu 红帽杯 XX

    一.拖入ida,静态分析 __int64 __fastcall sub_7FF65D4511A0(__int64 a1, __int64 a2) { signed __int64 v2; // rbx ...

  3. Python 操作 MySQL 的5种方式

    不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的5种方式,你可以在实 ...

  4. CF1444D Rectangular Polyline[题解]

    Rectangular Polyline 题目大意 给定 \(h\) 条长度分别为 \(l_1,l_2,--,l_h\) 的水平线段以及 \(v\) 条长度分别为 \(p_1,p_2,--.p_v\) ...

  5. 小刻也能看懂的Unraid系统使用手册:基础篇

    小刻也能看懂的Unraid系统使用手册 基础篇 Unraid系统简介 Unraid 的本体其实是 Linux,它主要安装在 NAS 和 All in One 服务器上,经常可以在 Linus 的视频里 ...

  6. python得到当前版本号

    import sys print(sys.winver) 3.7 # 导入sys模块的argv,winver成员,并为其指定别名v.wv from sys import argv as v, winv ...

  7. Java基础00-运算符4

    1. 算术运算符 1.1 运算符和表达式 1.2 算数运算符 余数的计算取余数是指整数除法中被除数未被除尽部分,且余数的取值范围为0到除数之间(不包括除数)的整数 ,例如27除以6,商数为4,余数为3 ...

  8. groff编写man页

    groff 是大多数 Unix 系统上所提供的流行的文本格式化工具 nroff/troff 的 GNU 版本.它一般用于编写手册页,即命令.编程接口等的在线文档.在本文中,我们将给你展示如何使用 gr ...

  9. linux U盘安装系统工具usb-creator-gtk

    linux平台下U盘安装linux系统的工具.它是ubuntu自带的工具,将建时将覆盖U盘中的所有内容.

  10. Jmeter入门 浏览器设置代理服务器和录制脚本

    第一步: 可以设置浏览器代理,本文章推荐使用火狐浏览器 在浏览器-首选项--网络设置里面设置代理服务器 注意:端口号可以自行设置,但是不可以与本机其他代理产生冲突 第二步: 打开jmeter工具,添加 ...