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

cara menangani kueri pembaruan ukuran besar di mysql dengan laravel

Jika Anda berpikir untuk membuat kueri seperti UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000 atau WHERE id IN (1, 2, 3, ..., 50000) maka itu mungkin akan terlalu besar. Jika Anda dapat membuat beberapa logika untuk meringkasnya, itu akan mempersingkat kueri dan mempercepat segalanya di MySQL secara signifikan. Mungkin bisa dibuat WHERE id >= 1 AND id <= 50000 .

Jika itu bukan pilihan, Anda bisa melakukannya secara beruntun. Anda mungkin akan mengulang baris file CSV, membuat kueri sebagai WHERE id = 1 OR id = 2... yang besar kueri dan setiap 100 baris atau lebih (atau 50 jika itu masih terlalu besar), jalankan kueri dan mulai yang baru untuk 50 ID berikutnya.

Atau Anda bisa menjalankan 50.000 UPDATE single pertanyaan di database Anda. Sejujurnya, jika tabel menggunakan indeks dengan benar, menjalankan 50.000 kueri hanya membutuhkan waktu beberapa detik di sebagian besar server web modern. Bahkan server tersibuk pun dapat menanganinya dalam waktu kurang dari satu menit.

Untuk membaca file dalam potongan, Anda dapat menggunakan fungsi akses file dasar PHP untuk itu:

$file = fopen('/path/to/file.csv', 'r');

// read one line at a time from the file (fgets reads up to the
// next newline character if you don't provide a number of bytes)
while (!feof($file)) {
    $line = fgets($file);

    // or, since it's a CSV file:
    $row = fgetcsv($file);
    // $row is not an array with all the CSV columns

    // do stuff with the line/row
}

// set the file pointer to 60 kb into the file
fseek($file, 60*1024);

// close the file
fclose($file);

Ini tidak akan membaca file lengkap ke dalam memori. Tidak yakin apakah Laravel memiliki caranya sendiri dalam menangani file, tetapi ini adalah cara melakukannya di PHP dasar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Akses Koneksi Ditolak untuk pengguna www-data

  2. Desain Basis Data:ke EAV atau tidak ke EAV?

  3. Kode Kesalahan MySQL 1452 Batasan Kunci Asing

  4. Bagaimana cara menambahkan setiap tautan (a href) menandai atribut rel dengan bantuan php?

  5. Tabel MySQL bertambah 10 karena beberapa alasan