MySQL数据库之mysql中迅速插入百万条测试数据的方法
小标 2018-12-06 来源 : 阅读 1844 评论 0

摘要:本文主要向大家介绍了MySQL数据库之mysql中迅速插入百万条测试数据的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

本文主要向大家介绍了MySQL数据库之mysql中迅速插入百万条测试数据的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。


           对比一下,首先是用 mysql 的存储过程弄的: 
复制代码 代码如下: 
mysql>delimiter $ 
mysql>SET AUTOCOMMIT = 0$$ 
mysql> create procedure test() 
begin 
declare i decimal (10) default 0 ; 
dd:loop 
INSERT INTO `million` (`categ_id`, `categ_fid`, `SortPath`, `address`, `p_identifier`, `pro_specification`, `name`, `add_date`, `picture_url`, `thumb_url`, `is_display_front`, `create_html_time`, `hit`, `buy_sum`, `athor`, `templete _style`, `is_hot`, `is_new`, `is_best`) VALUES 
(268, 2, '0,262,268,', 0, '2342', '423423', '123123', '2012-01-09 09:55:43', 'upload/product/20111205153432_53211.jpg', 'upload/product/thumb_20111205153432_53211.jpg', 1, 0, 0, 0, 'admin', '0', 0, 0, 0); 
commit; 
set i = i+1; 
if i= 1000000 then leave dd; 
end if; 
end loop dd ; 
end;$ 
mysql>delimiter ; 
mysql> call test; 
 
结果 
mysql> call test; Query OK, 0 rows affected (58 min 30.83 sec) 
非常耗时。 
于是我又找了一个方法 
先用PHP代码生成数据,再导入: 
复制代码 代码如下: 
<?php 
$t=mktime(); 
set_time_limit(1000); 
$myFile="e:/insert.sql"; 
$fhandler=fopen($myFile,'wb'); 
if($fhandler){ 
$sql="268 2 '0,262,268,' 0  '2342' '423423' '123123' '23423423' '2012-01-09 09:55:43' 'upload/product/20111205153432_53211.jpg' 'upload/product/thumb_20111205153432_53211.jpg' NULL NULL 38 '件' '' 123 123 0"; 
$i=0; 
while($i<1000000)//1,000,000 

$i++; 
fwrite($fhandler,$sql."
"); 

echo"写入成功,耗时:",mktime()-$t; 

 
然后再导入 
复制代码 代码如下: 
LOAD DATA local INFILE 'e:/insert.sql' INTO TABLE tenmillion(`categ_id`, `categ_fid`, `SortPath`, `address`, `p_identifier`, `pro_specification`, `name`, `description`, `add_date`, `picture_url`, `thumb_url`, `shop_url`, `shop_thumb_url`, `brand_id`, `unit`, `square_meters_unit`, `market_price`, `true_price`, `square_meters_price`); 
 
注意字段不再以逗号分割,以 分割,条记录以
分割。结果我插入10次数据,100W平均只要1分钟搞定。 
第二种方式mysql中间省略了很多中间步骤,导致插入速度远胜于第一种,具体的没有研究。 

快速生成mysql上百万条测试数据
由于测试需要,原表中只有1万条数据,现在随机复制插入记录,快速达到100万条。 

itemid是主键。 

运行几次下面代码。随机取1000条插入, 

insert into downitems (chid,catid,softid,....) 
SELECT chid,catid,softid... FROM `downitems` WHERE itemid >= (SELECT floor(RAND() * (SELECT MAX(itemid) FROM `downitems`))) ORDER BY itemid LIMIT 1000; 

然后可以修改1000的数字了。改为5000或者1万。很快可以达到100万的数据量了。

   

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程