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

PHP PDO menyisipkan beberapa (10000+) baris yang sama menggunakan bindParam. Latihan yang bagus?

Anda tidak perlu bindParam() selama setiap iterasi dari loop. bindParam() menyebabkan variabel $v1, $v2, dll. terikat dengan referensi , jadi yang perlu Anda lakukan hanyalah mengubah nilai variabel-variabel ini, lalu menjalankan kembali kueri. Itu bisa mengurangi biaya overhead.

Anda juga dapat menghindari memanggil intval() setiap kali melalui loop. Pastikan $cloneCount dipaksa ke integer sekali , sebelum lingkaran. Itu adalah peningkatan yang sangat kecil, tetapi ini adalah praktik yang baik.

$cloneCount = (int) $cloneCount;

... 9 other bindParam
$insertG->bindParam(':v1', $v1, PDO::PARAM_STR);
$insertG->bindParam(':v2', $v2, PDO::PARAM_INT);

for ($i=0; $i < $cloneCount; $i++) 
{
  $v1 = /* something */
  $v2 = /* something */
  $insertG->execute();
}

Anda juga harus menghindari komit otomatis. Kurangi overhead transaksi MySQL per eksekusi pernyataan dengan memulai transaksi eksplisit , menyisipkan beberapa ribu baris, lalu melakukan transaksi.

Tetapi cara terbaik untuk mempercepat INSERT massal dari ribuan baris serupa ke satu tabel adalah dengan menggunakan MUAT INFILE LOKAL DATA bukannya INSERT. Ini berjalan 10-20x lebih cepat daripada INSERT baris demi baris, bahkan jika Anda menggunakan parameter, transaksi, penyisipan multi-baris, dan trik lain yang dapat Anda pikirkan.

Bahkan jika Anda harus menggunakan PHP untuk menulis data Anda ke dalam file .CSV ke disk dan kemudian menggunakan LOAD DATA LOCAL INFILE pada file itu, itu masih jauh lebih cepat.

Lihat juga Kecepatan Pernyataan INSERT di manual MySQL untuk tips lainnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan nilai SQL_CALC_FOUND_ROWS menggunakan pernyataan yang disiapkan?

  2. cara memeriksa tabel kustom wordpress kosong atau tidak

  3. Peringkat MySQL Dengan Berat

  4. Apa perintah SQL untuk mengembalikan nama bidang tabel?

  5. Perbarui semua nilai kolom menjadi huruf kecil