起源

在公司优化SQL遇到一个索引的问题,晚上回家想继续验证,无奈没有较多数据的表,于是,想造一些随机的数据,用于验证。

于是

于是动手写。由于自己不是MySQL能手,写得也不好。最后,插入的速度也不快,我使用的是MySQL的InnoDB引擎,电脑跑了差不多一通宵才插入100W数据(为自己的程序汗颜)。虽然这样,我还是再次保留这份代码,以防下次要使用。嘿嘿。(插入时切换成MyISAM引擎,插入速度会快很多,插入完毕再切换回来)

这里开始,备份我的代码

需要插入数据的表:

create table `t_member` (
`id` int (11),
`member_no` varchar (36),
`user_name` varchar (384),
`register_date` datetime
);

生成随机数字的函数:

DELIMITER $$

USE `demo`$$

DROP FUNCTION IF EXISTS `f_rand_num`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `f_rand_num`(
start_num BIGINT,
end_num BIGINT
) RETURNS bigint(20)
BEGIN
RETURN FLOOR(start_num + RAND() * (end_num - start_num + 1));
END$$ DELIMITER ;

生成随机N位字符串的函数:

DELIMITER $$

USE `demo`$$

DROP FUNCTION IF EXISTS `f_rand_str`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `f_rand_str`(l INT) RETURNS varchar(256) CHARSET utf8
BEGIN
DECLARE chars_range varchar(128) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE random_str varchar(256) DEFAULT '';
DECLARE i INT DEFAULT 0; WHILE i < l DO
SET random_str = concat(random_str, char(ascii('a') + f_rand_num(0, 25)));
SET i = i +1;
END WHILE; RETURN random_str;
END$$ DELIMITER ;

插入数据的存储过程:

DELIMITER $$

USE `demo`$$

DROP PROCEDURE IF EXISTS `p_make_data`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_make_data`(l INT)
BEGIN
DECLARE i INT DEFAULT 0; WHILE i < l DO
insert into `t_member` (`member_no`, `user_name`, `register_date`)
values(f_rand_num(100000000000, 999999999999), f_rand_str(8), '2016-08-01');
SET i = i + 1; IF (i % 1000 = 0) THEN
select @i;
END IF; END WHILE;
END$$ DELIMITER ;

附一些测试SQL:

-- 调用过程
call p_make_data(500000); -- 一些测试SQL
select f_rand_num(100000000000, 999999999999);
select f_rand_str(8);
select ORD('97');
select substring('hello', 5, 1);
select ascii('a');
select char(97);
select 100 % 5;
select count(1) from t_member t order by t.`id` desc;

后来的话(非常重要哦!)

后来参考了一篇文章,它提及,转换为MyISAM引擎插入数据速度会快很多,插入完毕后再转换回来InnoDB引擎使用,另外文章中还提及了一些提高速度的小诀窍,大家可以去看:mysql快速保存插入大量数据一些方法总结

【MySQL】MySQL快速插入大量数据的更多相关文章

  1. MySQL如何快速插入数据

    前言: 日常学习和工作中,经常会遇到导数据的需求.比如数据迁移.数据恢复.新建从库等,这些操作可能都会涉及大量数据的导入.有时候导入进度慢,电脑风扇狂转真的很让人崩溃,其实有些小技巧是可以让导入更快速 ...

  2. Sql Server数据库之通过SqlBulkCopy快速插入大量数据

    废话不多说,直接上代码 /// <summary> /// 海量数据插入方法 /// </summary> /// <param name="connectio ...

  3. mysql快速插入大数据

    说的是插入数据,这个倒像是载入数据. 上一篇,是按照插入数据来写的,就是insert into,当时插入一万条实在是太慢了,大概是286734毫秒. insert into table values, ...

  4. MySQL数据库快速造大量数据

    这段时间做性能测试,发现数据都是分库写进数据库了,并且要构造大量数据,大概4000万的数据量,用普通的方法,写个MySQL函数,之前测试过,大概200万数据也要跑一个多小时,太慢了. 后面研究发现有个 ...

  5. Mysql如何快速插入100万条记录?

    1.java程序拼接insert带多个value,使一次提交多个值. 2.插入数据之前先删除索引(注意主键不能删除),然后插入数据,最后重建索引 3.可以设置手动commit,用来提高效率 4.使用批 ...

  6. MySQL获取刚插入的数据

    1. 通过自增的键auto_increment取得. select max(id) from tablename 这样的做法须要考虑并发的情况.须要在事务中对主表加以"X锁",待获 ...

  7. mysql数据库表插入单条数据/批量插入数据

    1.创建表格 reate table trade( id int(4) not null primary key auto_increment, product varchar(30) null, p ...

  8. SQL Server 2012中快速插入批量数据的示例及疑惑

    SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...

  9. 使用IDEA快速插入数据库数据的方法

    如上图所示:数据库创建表主键使用了自增列自增因此忽略,只有后两列非主键得数据,在数据较多得时候使用IDEA快捷键Ctrl+R键,快速查找替换.

随机推荐

  1. css 字体超出隐藏

    height: 55px white-space: nowrap; overflow: hidden; text-overflow: ellipsis;

  2. NY-字符串替换

    描述编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输入 ...

  3. 除了白名单外的IP每秒最多处理 8 个请求 limit_conn_zone

    防止黑客知道你的源服务器真实IP进行并发攻击,通常只需要保护动态文件请求,�php. 添加文件 nginx/conf/limit/whiteip.conf 里面是你要忽略限制的 白名单 IP地址,通常 ...

  4. Oracle中有个tkprof来格式化oracle的trace文件

    1.MySQL日志文件系统的组成2.慢查询日志3.慢查询日志演示long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10sslow_query_lo ...

  5. 20145337实验三实验报告——敏捷开发与XP实践

    20145337实验三实验报告--敏捷开发与XP实践 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 ** 实验步骤**### 敏捷开发与XP 软件工程包括下列领域:软件需求 ...

  6. Struts2的流程(三)

    Struts的流程图如下(需要完全理解):

  7. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  8. IOS第一天多线程-01pthread

    *** #import "HMViewController.h" #import <pthread.h> @interface HMViewController () ...

  9. JDBC 基本操作

    1. 简介 JDBC(Java DataBase Connectivity) 是有一些接口和类构成的API JDBC是J2SE的一部分, 又java.sql: javax.sql包组成.   应用程序 ...

  10. Java中的virtual method

    今天看jcvm的标准的 时候,看到有一个virtual method,感觉很疑惑,以前看Java的时候并没有发现有这类方法. 百度.Google了一下,才发现,Java中普通方法就是virtual m ...