发布于 2016-03-01 03:56:50 | 574 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Mysql教程,程序狗速度看过来!

Mysql关系型数据库管理系统

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。


最近想到创建一个大量数据的测试环境,于是找了一下怎么插入100W条数据,我用的是20个字段
对比一下,首先是用 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\t2\t'0,262,268,'\t0\t '2342'\t'423423'\t'123123'\t'23423423'\t'2012-01-09 09:55:43'\t'upload/product/20111205153432_53211.jpg'\t'upload/product/thumb_20111205153432_53211.jpg'\tNULL\tNULL\t38\t'件'\t''\t123\t123\t0"; 
$i=0; 
while($i<1000000)//1,000,000 
{ 
$i++; 
fwrite($fhandler,$sql."\r\n"); 
} 
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`); 

注意字段不再以逗号分割,以\t分割,条记录以\r\n分割。结果我插入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万的数据量了。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务