替换以插入mysql db表中超过200000条记录的查询

替换以插入mysql db表中超过200000条记录的查询,mysql,insert-query,Mysql,Insert Query,我不得不一次插入200000多条记录到mysql db表中,insert查询导致性能问题,有什么可以替代它呢 下面是我正在使用的代码 $xml = simplexml_load_file("247electrical.xml"); foreach($xml->merchant as $merchant){ define('API', 'PS'); require_once('constants.inc.php'); require_once('classes/class.ClientF

我不得不一次插入200000多条记录到mysql db表中,insert查询导致性能问题,有什么可以替代它呢

下面是我正在使用的代码

$xml = simplexml_load_file("247electrical.xml");

foreach($xml->merchant as $merchant){

define('API', 'PS');
require_once('constants.inc.php');
require_once('classes/class.ClientFactory.php');
$oClient = ClientFactory::getClient(API_USERNAME, API_PASSWORD, API_USER_TYPE); $merchattrs=$merchant->attributes();
$aParams100 = array('iMerchantId' => array($merchattrs->id)); $merchantinfo= $oClient->call('getMerchant', $aParams100);

//Get Products

foreach($xml->merchant->prod as $product){

$attrs=$product->attributes();

//Insert Products into DB
mysql_query('INSERT INTO productstemp (merchant_id, merchant_name, aw_product_id, merchant_product_id, product_name, description, category_id, merchant_category, aw_deep_link, aw_image_url, search_price, delivery_cost, merchant_image_url, aw_thumb_url, brand_name, delivery_time, display_price, in_stock, merchant_thumb_url, model_number, pre_order, stock_quantity, store_price, valid_from, valid_to, web_offer, merchantimage, cleancompany) VALUES("'.$merchattrs->id.'","'.$merchattrs->name.'","'.$attrs->id.'"," ","'.$product->text->name.'","'.$product->text->desc.'","'.$product->cat->awCatId.'","'.$product->cat->mCat.'","'.$product->uri->awTrack.'","'.$product->uri->awImage.'","'.$product->price->buynow.'","'.$product->price->delivery.'","'.$product->uri->mImage.'","'.$product->uri->awThumb.'","'.$product->brand->brandName.'","'.$product->delTime.'","'.$product->price->buynow.'","'.$attrs->in_stock.'","'.$product->uri->mThumb.'","'.$product->modelNumber.'","'.$attrs->pre_order.'","'.$attrs->stock_quantity.'","'.$product->price->store.'","'.$product->valFrom.'","'.$product->valTo.'","'.$attrs->web_offer.'","'.$merchantinfo->oMerchant->sLogoUrl.'","247electrical" ) ')
or die(mysql_error());     

}
} 

谢谢

我不认为插入查询本身就是问题所在。毕竟,对于mysql来说,20万次插入并没有那么多

首先,我猜读取文件的速度很慢。SimpleXML很方便,但对于大型文件,它会导致巨大的内存开销。想想像PHP这样的流式XML阅读器

您正在将单个语句发送到mysql服务器,这比发送一个大型语句要慢得多。此外,单insert语句应该包装在事务中。如果您处理了10000条记录并插入它们,然后您的脚本死亡/mysql服务器死亡等等,会发生什么情况。?如何在无需手动操作(清除表格、查找已处理的内容等)的情况下安全地重新启动脚本

除此之外,一个具有多个值的INSERT语句应该要快得多。我会让您的PHP脚本输出查询,使其最终看起来像这样:

INSERT INTO table(field_1, field_2, field 3)
VALUES('foo 1', 'bar 1', 'baz 1'),
VALUES('foo 2', 'bar 2', 'baz 2'),
...
然后通过以下方式导入该文件:

$ mysql ... credentials options etc ... < output.sql
$mysql。。。凭证选项等…

如果这仍然太慢…购买更多硬件可能也有帮助。

我不明白,将这些信息放入数据库的唯一方法是插入,那么你的问题是什么?这是一个cron作业,我已经在PHP foreach循环中使用插入查询,这使得脚本变慢,因此,我需要另一种解决方法来完成这项工作,而不降低处理速度。为什么不使用Mysql任务来导入包含所有这些行的文件?或者创建一个cronjob来调用将文件导入数据库的过程?它是从xml导入值,然后迭代foreach循环以插入。您可以将xml导入数据库,但我不确定这是否适用于您的xml