【发布时间】: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 只是为了睡一会儿