Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel - Penyisipan massal pada kunci duplikat memperbarui kumpulan data besar

Saya punya solusi - Ini tidak elegan, tetapi sangat cepat. 1.6s untuk 80k record. Solusi yang lebih baik akan sangat dihargai.

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengoptimalkan kueri MySQL dengan beberapa gabungan kiri

  2. Perintah MySQL Jelaskan abaikan LIMIT?

  3. Menggabungkan kondisi dari dua kolom mysql

  4. Email Konfirmasi Php tidak terkirim

  5. Permintaan MySQL dengan beberapa pernyataan AND tampaknya mengabaikan satu