【问题标题】:php importing csv into database [closed]php将csv导入数据库[关闭]
【发布时间】:2012-12-16 16:25:37
【问题描述】:

我有一个包含 65000 条记录的 csv 文件,我需要将其导入到我的数据库中。

我尝试了以下代码,但速度很慢。

他们是不是我可以更快地做到这一点。

@set_time_limit(1200);
    $file = './csvFiles/aw_Products.csv';
    $handle = fopen( $file , 'r');
    while (($row = fgetcsv($handle)) !== false) {       
        if( is_integer($row[0]) || $row[0] != 0 )
        {
            $product = new Product();
            $product->merchant_id       = $row[0];
            $product->merc_product_id   = $row[1];
            $product->product_id        = $row[2];
            $product->product_name      = $row[3];
            $product->product_desc      = htmlentities($row[4]);
            //$product->keywords            = htmlentities($row[6]);
            $product->category_id       = $row[5];
            $product->link_url          = $row[6];
            $product->image_url         = $row[7];
            $product->price             = $row[8];
            $product->delivery_cost     = $row[9];
            //$product->deliveryAvailable   = $row[12];
            //$product->deliveryDetails = $row[13];
            //$product->valid_to            = $row[14];
            //$product->valid_from      = ($row[3] == 'yes') ? 1 : 0;

            if( Product::find_by_id( $row[0] ) )
                $product->updateRecord();
            else
                $product->createRecord();
        }
        sleep (1);
    }
    fclose($handle);

【问题讨论】:

  • sleep (1); 是干什么用的?您正在调用它 65000 次,所以当然可能需要一段时间。
  • 尝试将此代码 -> $product = new Product() 放在循环之外..
  • 睡眠 (1) * 65000 = 65000 秒 ~ 1083 分钟 ~ 18 小时。删除sleep,您的插入应该会显着加快。
  • @Wesley Murch 只是为了睡一会儿

标签: php mysql


【解决方案1】:

sleep() 可能是罪魁祸首。但我也想知道:Product::find_by_id() 因为它可能会为每个 INSERT 执行 SELECT 查询。您可能会考虑进行单个 SELECT 查询以将所有现有 DB 键放入 PHP 数组,然后您可以使用 *in_array()* 来检查是 UPDATE 还是 INSERT。可能不言而喻,但如果你插入,你会想要添加到 PHP 数组中。

【讨论】:

    【解决方案2】:

    放弃 sleep() 并使用准备好的语句进行 mysql 插入/更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2011-06-16
      • 1970-01-01
      • 2013-10-15
      • 2011-08-09
      相关资源
      最近更新 更多