【MySQL】MySQL快速插入大量数据

起源

在公司优化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快速保存插入大量数据一些方法总结

posted @ 2016-08-17 21:20  nick_huang  阅读(25754)  评论(0编辑  收藏  举报