向mysql数据库中批量插入数据

有时候,我们在做数据库性能调优的时候,往往需要在数据库中插入大量的数据测试性能。那么,如何向mysql数据库的表中一次性插入上百万条随机数据呢?以下以一个小的案例为大家做演示。
我们以一个简单的员工表employee表作为演示,其中id为员工的主键,emp_no为员工的编号,emp_name为员工的姓名,使用随机的字符串。

向mysql数据库中批量插入数据_第1张图片
首先创建一个函数,用于返回随机的字符串。其中参数n为要返回的字符串的长度。函数的代码如下:

DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
	DECLARE chars_str VARCHAR(100) DEFAULT 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
	DECLARE return_str VARCHAR(255) DEFAULT '';
	DECLARE i INT DEFAULT 0;
	WHILE i < n DO
		SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
		SET i = i + 1;
	END WHILE;
	RETURN return_str;
END

将函数成功执行后,创建可批量插入数据的存储过程,如下所示。

DELIMITER $$
CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN 
	DECLARE i INT DEFAULT 0;
	#set autocommit = 0 把autocommit设置成0
	SET autocommit = 0;
	REPEAT
		SET i = i + 1;
		#sql文
		INSERT INTO employee(emp_no,emp_name) VALUES ((START+i),rand_string(6));
	UNTIL i = max_num
	END REPEAT;
	COMMIT;
END

参数start为员工的起始编号,这里以1001作为起始编号演示
参数max_num为要插入的记录总数,这里用500,000演示,当然你也可以自定义要插入的记录总数。

成功创建存储过程后,我们开始调用。

DELIMITER ;
CALL insert_emp(1001,500000);

使用以上脚本,在我的电脑本地的mysql数据库中,一次性插入50W条测试数据库,耗时22秒左右,怎么样,效率还是挺高的吧。

你可能感兴趣的:(高级篇,数据库优化,mysql,数据库)