一种快速在MySQL中插入数百万测试数据的方法

与此相反,第一件事是使用MySQL存储过程:
复制代码代码如下所示:
分隔符$
MySQL >设置自动提交= 0美元
创建过程测试()
开始
声明十进制(10)默认值0;
Dd:环
插入`万`(` categ_id `,` categ_fid `,` sortpath `,`地址`,` p_identifier `,` pro_specification `,`名字`,` add_date `,` picture_url `,` thumb_url `,` is_display_front `,` create_html_time `,`打`,` buy_sum `,`阿瑟`,`模板,_style `,` is_hot `,` is_new `,` is_best `)值
(268, 2,'0262268,` 0,'2342 ','423423 ','123123 ','2012-01-09 09:55:43 ','upload /产品/ 20111205153432_53211 .jpg,'upload /产品/ thumb_20111205153432_53211 .jpg',1, 0, 0,0,'admin ','0',0, 0, 0)。
承诺;
设置i = i + 1;
如果我= 1000000,然后离开DD;
最后如果;
结束循环;
美元;
分隔符;
调用测试;

结果
调用测试;查询OK,受影响的0行(58分钟30.83秒)
这是非常耗费时间的。
所以我又找到了一条路
首先,使用PHP代码生成数据,然后导入:
复制代码代码如下所示:
< PHP
T = mktime(美元);
(1000)set_time_limit;
美元=E来: /插入。SQL;
一个美元= fopen($来,'wb);
如果(每一个){
为SQL = 268 T2 T '0262268, T0 T '2342 T T '423423 '123123 T T '23423423 '2012-01-09 09:55:43 t'upload /产品/ 20111205153432_53211 .jpg t'upload / /产品thumb_20111205153432_53211 .jpg tnull tnull T38 Tt'parts 123型 123型 T0 。
$ I = 0;
当($ i < 1000000)1000000
{
美元+;
fwrite(一个美元美元,SQL。 ;
}
写成功,耗费时间:
}

然后再导入它
复制代码代码如下所示:
负荷数据的本地infile'e: /插入表格。sql'into千万(` categ_id `,` categ_fid `,` sortpath `,`地址`,` p_identifier `,` pro_specification `,`名字`,`描述`,` add_date `,` picture_url `,` thumb_url `,` shop_url `,shop_thumb_url `,` brand_id `,`单元`,` square_meters_unit `,` market_price `,` true_price `,` square_meters_price `);

注意字段不再用逗号分割,用t分隔,而bar记录被拆分为。因此,我把10的数据,与平均100W是1分钟。
在第二种方法中,在MySQL中间省略了很多中间步骤,这导致了比第一个更好的插入速度,并且没有特定的研究。

在MySQL上快速生成数以百万计的测试数据
由于测试需要,原始表中只有1万条数据,现在随机复制到记录中,很快达到100万。

对应的主键。

运行以下代码几次。随机插入1000个插入,

插入downitems(责骂,$article->catid,softid,…)
选择责骂,$article->catid softid,从` downitems `哪里…Itemid(选择> =地板(RAND(选择)*(max(ITEMID)从` downitems `)顺序)对应的限制1000);

然后您可以修改1000的数量。更改为5000或1万。它很快就可以达到数据量的100万。