起源

在公司优化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. CentOS下IP的配置

    1.打开命令窗口,切换成root账户:su - root 2.进入目录:/etc/sysconfig/network-scripts,打开文件vi ifcfg-eth0 3.修改参数: ## 名称DE ...

  2. IOS第12天(1,UIViewController控制器的创建的 三种方式,和第一个view创建)

    *************HMAppDelegate.m中 @implementation HMAppDelegate - (BOOL)application:(UIApplication *)app ...

  3. IOS第八天(5:UITableViewController新浪微博, 计算行高)

    在 4 的 基础上重写 以下的方法 control #pragma mark - 代理方法 /** 计算单元格行高 */ - (CGFloat)tableView:(UITableView *)tab ...

  4. ssh增加密匙登录

    使用要创建登录密匙的账号登录 生成密匙 #ssh-keygen -t rsa 生成时提示输入密码,如果不输入,则直接回车即可,如果输入,将在无密匙登陆时要求输入该密码 进入生成目录.ssh #cd ~ ...

  5. Linux下安装vsftpd

    一.安装vsftpd及相关依赖包 #vsftpd安装程序 yum install vsftpd #vsftpd虚拟登陆账户必要依赖包 yum install pam* db4* 安装完之后,vsftp ...

  6. scala在linux以及在windows的安装,以及在IDEA中新建Scala项目

    一:linux下配资scala 1.上传 2.解压 3.配置环境 4.source一下 5.启动和简单使用 6.输出语句 二:scalac的使用 1.新建文件测试目录 2.新建程序 3.文件编译器书写 ...

  7. JAVA程序改错 (易错题)

    JAVA程序改错 1. abstract class Name { private String name; public abstract boolean isStupidName(String n ...

  8. csrf 跨站请求伪造

    转自  http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

  9. Slip.js(移动端跟随手指滑动组件,零依赖)

    Slip.js可用于移动端滑动banner,移动端整屏滑动等效果,个人觉得用于移动端滑动banner比较好,不会和iScroll.js起冲突,因为它不依赖任何其它的js库. Html: <!do ...

  10. The tag 'DataGridTextColumn' does not exist in XML namespace ....

    错误 10 The tag 'DataGridTextColumn' does not exist in XML namespace 'http://schemas.microsoft.com/win ...