Laravel:如何加快foreach数据库更新

时间:2017-08-20 14:48:00

标签: php mysql laravel

我得到了这个我想每个月运行的cron工作,它为每个活跃的客户分配随机序列号。

但是需要很长时间才能运行,拥有2000多名活跃客户,每位客户获得10个随机序列,需要20k +更新查询才能完成工作。

我怎样才能加快速度呢?

foreach($subscriptions as $subscription){
    $updated_at = Carbon::now()->toDateTimeString();
    foreach($games as $game){
        DB::table('serials')
            ->whereNull('user_id')
            ->where('game_id', $game->game_id)
            ->limit(1)
            ->update([
                'user_id'    => $subscription->user_id,
                'updated_at' => $updated_at
            ]);
    }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试:

foreach($subscriptions as $subscription){
    $updated_at = Carbon::now()->toDateTimeString();
    foreach($games as $game){
        DB::table('serials')
            ->whereNull('user_id')
            ->where('game_id', $game->game_id)
            ->limit(1)
            ->updateVeryFast([
                'user_id'    => $subscription->user_id,
                'updated_at' => $updated_at
            ]);
    }
}