MySQL 快速生成百万级测试数据实现思路

it2022-05-05  164

1、生成思路

利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中

2、创建普通表及内存表

#普通表 CREATE TABLE `vote_record` (     `id` INT (11) NOT NULL AUTO_INCREMENT,     `user_id` VARCHAR (20) NOT NULL,     `vote_id` INT (11) NOT NULL,     `group_id` INT (11) NOT NULL,     `create_time` datetime NOT NULL,     PRIMARY KEY (`id`),     KEY `index_user_id` (`user_id`) USING HASH ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 #内存表 CREATE TABLE `vote_record_memory` (     `id` INT (11) NOT NULL AUTO_INCREMENT,     `user_id` VARCHAR (20) NOT NULL,     `vote_id` INT (11) NOT NULL,     `group_id` INT (11) NOT NULL,     `create_time` datetime NOT NULL,     PRIMARY KEY (`id`),     KEY `index_id` (`user_id`) USING HASH ) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8

3、创建函数及存储过程

# 函数 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_vote_memory`(IN n int) BEGIN     DECLARE i INT DEFAULT 1;     WHILE (i <= n ) DO       INSERT into vote_record_memory  (user_id,vote_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() );             set i=i+1;     END WHILE; END # 存储过程 CREATE PROCEDURE `add_vote_memory`(IN n int) BEGIN DECLARE i INT DEFAULT 1; WHILE (i <= n ) DO INSERT into vote_record_memory (user_id,vote_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() ); set i=i+1; END WHILE; END

4、调用存储过程 (生成内存表数据)

CALL add_vote_memory(1000000)

如果内存不足,Windows 中添加一下两段代码。路径为  C:\ProgramData\MySQL\MySQL Server 5.X 中的my.ini

 添加 或 修改

  tmp_table_size=1G   max_heap_table_size = 1G

5、插入普通表中

INSERT into vote_record SELECT * from  vote_record_memory


最新回复(0)