gpt4 book ai didi

php - UPDATE query form while循环,代码很慢

转载 作者:行者123 更新时间:2023-11-30 21:30:21 24 4
gpt4 key购买 nike

我的 Laravel 应用程序中有这段代码:我读取了 .csv 文件中的每一行,并想更新一个值。但是对于 8k 行的 .csv,倍数的更新查询非常慢。我怎样才能加快这段代码的速度?谢谢

DB::beginTransaction();

try {

$delimiter = ",";
$firstLine = true;

if ($handle !== FALSE) {
$position = 1;
while (($csv_line = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {

if ($firstLine == true) {
$firstLine = false;
continue;
}

$player_uid = $csv_line[0];

DB::table('scores')
->where('season_uid', $season_uid)
->where('day', $day)
->where('player_uid', $player_uid)
->update(['position' => $position]);

$position++;

}
fclose($handle);
}

DB::commit();
return true;

} catch (\Exception $e) {
Log::error($e);
DB::rollBack();
return false;
}

最佳答案

MySQL 不支持批量更新,但有一个巧妙的技巧可以使用 ON DUPLICATE KEY UPDATE 将更新替换为插入条款。这样您实际上可以批量更新您的记录。查看此答案 for some examples .

据我所知,尽管 Laravel 在其查询生成器中不支持此子句,因此您必须手动生成查询并通过 DB::statement()。确保对传入的行进行分块(例如,按 100 个分块),您会看到速度显着提高。

但请注意,更新 8k 行并不是一项成本低廉的操作。最佳做法是将其委派给单独的作业并在您的应用程序中设置队列,以便您的工作人员可以在后台单独处理这些更新。您可以阅读有关作业和队列的更多信息 in the official documentation .

关于php - UPDATE query form while循环,代码很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542608/

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