mysql中添加5万条记录_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代码生成数据,再导入:

复制代码 代码如下:

$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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值