gpt4 book ai didi

php - 批量数据插入php mysql速度

转载 作者:行者123 更新时间:2023-11-29 01:29:54 25 4
gpt4 key购买 nike

我有一个读取 XML 文件并将数据插入 mysql 数据库的脚本。我的问题是它只插入一条记录,我有 60 000 行数据要插入,我希望它比花一个小时插入行更快。

我的脚本

$db_link = mysql_connect('localhost', 'root', '');
$db = mysql_select_db('my_db');
//SIMPLEXML: Cleaned file is opened
$xml_source='cleanme.xml';
$xml=simplexml_load_file($xml_source);
//Reading each tag in the xml file
foreach($xml->Property as $prop){
echo 'Reference '.$prop->Reference.'<br>';
$ref_id=$prop->Reference;
//Reading sub tags in the xml file
foreach($prop->Images->Image as $chk)
{
echo 'REF_ID '.$ref_id.' '.'ImageID '.$chk->ImageID.'<br>';
$sql_refid = $ref_id;
$sql_link =$chk->ImageID;
//Inserts data into to the database
$sql.="INSERT INTO prop_ref (id, ref, link) VALUES (NULL, '{$sql_refid}','{$sql_link}')";

}
}
mysql_query($sql);
echo 'Complete';

最佳答案

将你的数据分成 block ,通过每个 block 的记录数(我更喜欢这个),或者通过将你的数据分成 n 集,然后进行批量插入,例如

INSERT INTO `table_name` (id, ref, link) 
VALUES (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')
, (NULL, '{$sql_refid}', '{$sql_link}')

更新:

对于分片,这是一种实现方式:

$shardSize = 500;
$sql = '';
foreach ($data as $k => $row) {
if ($k % $shardSize == 0) {
if ($k != 0) {
mysqy_query($sql);
}
$sql = 'INSERT INTO `dbTable` (id, ref, link) VALUES ';
}
$sql .= (($k % $shardSize == 0) ? '' : ', ') . "(NULL, '{$row['refid']}', '{$row['link']}')";
}

关于php - 批量数据插入php mysql速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19147440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com