使用for循环吗?
但是,将数据快速加载到MySQL中的最快选项是使用LOAD DATA INFILE命令,您可以通过PHP创建要加载的文件,然后通过不同的过程(或作为原始过程的最后一步)将其提供给MySQL。
如果无法使用文件,请使用以下语法:
insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)
所以你可以减少要运行的句子总数。
编辑:根据你的片段,似乎你可以从MySQL的INSERT ... ON DUPLICATE KEY UPDATE语法中受益,让数据库来完成工作并减少查询次数。这假设你的表具有主键或唯一索引。
为了每100行命中DB,你可以做类似以下的事情(请检查并将其修复到您的环境)
$insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();
foreach($itemList as $key => $item){
$val1 = escape($item->col1); //escape is a function that will make
//the input safe from SQL injection.
//Depends on how are you accessing the DB
$val2 = escape($item->col2);
$queries[] = $insertOrUpdateStatement1.
"('$val1','$val2')".$insertOrUpdateStatement2.
"col1 = '$val1', col2 = '$val2'";
$counter++;
if ($counter % 100 == 0) {
executeQueries($queries);
$queries = array();
$counter = 0;
}
}
executeQueries会获取数组并发送一个多个查询:
function executeQueries($queries) {
$data = "";
foreach ($queries as $query) {
$data.=$query.";\n";
}
executeQuery($data);
}