• 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万的数据量了。

    转自:http://www.jb51.net/article/30099.htm

     只是插入随机的百万条数据?如果是这种就使用存储过程,相关例子看这里:http://fc-lamp.blog.163.com/blog/static/17456668720108305520576/

    如果是从外部导入大数据文件,那么可以尝试使用LOAD DATA INFILE ,参看:http://fc-lamp.blog.163.com/blog/static/17456668720121021104916483/

    或者参看官网:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#insert-speed

  • 相关阅读:
    Singer Michael Jackson dead at 50
    [转载]使用NUnit在.Net编程中进行单元测试
    [转载]简单蚁群算法的实现
    发布yxyDES2的C语言版
    常用的正则表达式
    C#正则表达式快速入门
    Choosing between ASP.NET MVC and ASP.NET Webforms
    C#里的一些加密解密标准函数示例——DES,SHA1,RSA
    Comparing ASP.NET MVC and ASP.NET
    [原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
  • 原文地址:https://www.cnblogs.com/endtel/p/5404065.html
Copyright © 2020-2023  润新知