mysql 快速生成百万条测试数据

一、生成思路

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

 

二、建立内存表及普通表

[sql] view plain copymysql

 

  1. CREATE TABLE `vote_record_memory` (  
  2.     `id` INT (11) NOT NULL AUTO_INCREMENT,  
  3.     `user_id` VARCHAR (20) NOT NULL,  
  4.     `vote_id` INT (11) NOT NULL,  
  5.     `group_id` INT (11) NOT NULL,  
  6.     `create_time` datetime NOT NULL,  
  7.     PRIMARY KEY (`id`),  
  8.     KEY `index_id` (`user_id`) USING HASH  
  9. ) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8  

 

[sql] view plain copylinux

 

  1. CREATE TABLE `vote_record` (  
  2.     `id` INT (11) NOT NULL AUTO_INCREMENT,  
  3.     `user_id` VARCHAR (20) NOT NULL,  
  4.     `vote_id` INT (11) NOT NULL,  
  5.     `group_id` INT (11) NOT NULL,  
  6.     `create_time` datetime NOT NULL,  
  7.     PRIMARY KEY (`id`),  
  8.     KEY `index_user_id` (`user_id`) USING HASH  
  9. ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8  

 

三、建立函数及存储过程

[sql] view plain copysql

 

  1. CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1  
  2. BEGIN   
  3. DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';   
  4. DECLARE return_str varchar(255) DEFAULT '' ;  
  5. DECLARE i INT DEFAULT 0;   
  6. WHILE i < n DO   
  7. SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));   
  8. SET i = i +1;   
  9. END WHILE;   
  10. RETURN return_str;   
  11. END  

 

[sql] view plain copy函数

 

  1. CREATE  PROCEDURE `add_vote_memory`(IN n int)  
  2. BEGIN    
  3.   DECLARE i INT DEFAULT 1;  
  4.     WHILE (i <= n ) DO  
  5.       INSERT into vote_record_memory  (user_id,vote_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() );  
  6.             set i=i+1;  
  7.     END WHILE;  
  8. END  

 

四、调用存储过程

[sql] view plain copy性能

 

  1. CALL add_vote_memory(1000000)  

 

根据电脑性能不能所花时间不同,大概时间在小时级别,若是报错内存满了,只在修改max_heap_table_size 个参数便可,win7修改位置以下,linux,修改my.cnf文件,修改后要重启mysql,重启后内存表数据会丢失spa

 

 

五、插入普通表中


[sql] view plain copy.net

 

  1. INSERT into vote_record SELECT * from  vote_record_memory  


 

六、结果

更多php技术交流,可加Q群:884743303,里面各路大神为您保驾护航,blog

相关文章
相关标签/搜索