zoukankan      html  css  js  c++  java
  • 迅速插入百万条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中间省略了很多中间步骤,导致插入速度远胜于第一种,具体的没有研究。

  • 相关阅读:
    使用Azure Rest API获得Access Token介绍
    Azure Service Fabric应用程序日志记录与展现
    Azure Web App创建Python应用
    AzureWeb App如何做私有仓储的部署
    Python web在IIS上发布方法和原理
    [转载]DriverStore文件夹特别大,能删除吗?
    Azure Web APP中Local Git 如何部署分支
    Azure Web 应用如何修改 IIS 配置
    文件上传绕过
    windows下通过配置服务器安全策略指定IP地址远程访问服务器的设置方法
  • 原文地址:https://www.cnblogs.com/steptoupper/p/2444019.html
Copyright © 2011-2022 走看看