利用mysql内存表插入速度快的特点,先存储过程在内存表中生成数据,然后再从内存表插入普通表中
一.创建内存表
CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `name` VARCHAR (50) NOT NULL, `pwd` VARCHAR(32) NOT NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
二.创建普通表
CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `name` VARCHAR (50) NOT NULL, `pwd` VARCHAR(32) NOT NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
三.创建一个函数,用于生成随机字符串
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1 BEGIN DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 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()*62 ),1)); SET i = i +1; END WHILE; RETURN return_str; END
四.创建存储过程
CREATE PROCEDURE `add_data`(IN n int) BEGIN DECLARE i INT DEFAULT 1; WHILE (i <= n ) DO INSERT into test (name,pwd,create_time ) VALUES (rand_string(50),MD5(123456) ,now() ); set i=i+1; END WHILE; END
五.调用存储过程
CALL add_data(1000000);
由于mysql 默认内存允许容量小,会出现如下报错
windows 操作系统 找到 my.ini 修改 ,不同的集成环境,配置会有差别,修改max_heap_table_size = 1024M,或者添加进去即可,重启mysql,根据电脑性能不能所花时间不一样,大概时间在小时级别
六.插入到普通表中
INSERT into test2 SELECT * from test;