sql >> データベース >  >> RDS >> Mysql

Laravel-重複キーの一括挿入で大きなデータセットを更新

    私には解決策があります-それはエレガントではありませんが、非常に高速です。 80kレコードの場合は1.6秒。より良いソリューションがあれば幸いです。

    $allResults = [
        ['id' => 1, 'rank' => 100],
        ['id' => 2, 'rank' => 99],
        ['id' => 3, 'rank' => 102],
        ...
        ['id' => 80000, 'rank' => 3],
    ];
    
    $rankings = [];
    foreach ($allResults as $result) {
        $rankings[] = implode(', ', ['"' . $result['id'] . '"', $result['rank']]);
    }
    
    $rankings = Collection::make($rankings);
    
    $rankings->chunk(500)->each(function($ch) {
        $rankingString = '';
        foreach ($ch as $ranking) {
            $rankingString .= '(' . $ranking . '), ';
        }
    
        $rankingString = rtrim($rankingString, ", ");
    
        try {
            \DB::insert("INSERT INTO my_rankings (`id`, `rank`) VALUES $rankingString ON DUPLICATE KEY UPDATE `rank`=VALUES(`rank`)");
        } catch (\Exception $e) {
            print_r([$e->getMessage()]);
        }
    });
    


    1. 高可用性のためにPostgreSQL用のPerconaディストリビューションをデプロイする方法

    2. mysqlWHEREIN配列文字列/ユーザー名

    3. MySQL-Clusterの起動に失敗する

    4. mysqlで日付から月を取得するにはどうすればよいですか