Saya meneruskan dataset besar ke tabel MySQL melalui PHP menggunakan perintah insert dan saya bertanya-tanya apakah mungkin untuk memasukkan sekitar 1000 baris sekaligus melalui kueri selain menambahkan setiap nilai pada akhir string panjang mil lalu mengeksekusinya. Saya menggunakan kerangka CodeIgniter sehingga fungsinya juga tersedia untuk saya.
php
mysql
codeigniter
insert
bulkinsert
toofarsideways
sumber
sumber
Jawaban:
Merakit satu
INSERT
pernyataan dengan banyak baris jauh lebih cepat di MySQL daripada satuINSERT
pernyataan per baris.Yang mengatakan, sepertinya Anda mungkin mengalami masalah penanganan string di PHP, yang benar-benar masalah algoritma, bukan bahasa. Pada dasarnya, ketika bekerja dengan string besar, Anda ingin meminimalkan penyalinan yang tidak perlu. Terutama, ini berarti Anda ingin menghindari penggabungan. Cara tercepat dan paling efisien memori untuk membangun string besar, seperti untuk memasukkan ratusan baris sekaligus, adalah untuk mengambil keuntungan dari
implode()
fungsi dan penugasan array.Keuntungan dari pendekatan ini adalah Anda tidak menyalin dan menyalin ulang pernyataan SQL yang sejauh ini telah Anda rangkum dengan setiap rangkaian; sebaliknya, PHP melakukan ini sekali dalam
implode()
pernyataan. Ini adalah kemenangan besar .Jika Anda memiliki banyak kolom untuk disatukan, dan satu atau lebih sangat panjang, Anda juga bisa membuat lingkaran dalam untuk melakukan hal yang sama dan menggunakan
implode()
untuk menetapkan klausa nilai ke array luar.sumber
mysql_real_escape_string
denganmysqli_real_escape_string
danmysql_query
denganmysqli_query
karena saya menggunakan MySQLi dan ini sudah usang pada PHP5. Terimakasih banyak!mysql_*
telah dihapus dari PHP, jadi pastikan untuk menggunakanmysqli_*
antarmuka.Memasukkan banyak / memasukkan banyak sekarang didukung oleh codeigniter. Saya memiliki masalah yang sama. Meskipun sangat terlambat untuk menjawab pertanyaan, itu akan membantu seseorang. Itu sebabnya menjawab pertanyaan ini.
sumber
Anda bisa menyiapkan kueri untuk memasukkan satu baris menggunakan kelas mysqli_stmt, dan kemudian mengulangi array data. Sesuatu seperti:
Di mana 'idsb' adalah tipe data yang Anda ikat (int, double, string, blob).
sumber
Saya tahu ini adalah permintaan lama, tetapi saya baru saja membaca dan berpikir saya akan menambahkan apa yang saya temukan di tempat lain:
mysqli di PHP 5 adalah sebuah ojbect dengan beberapa fungsi bagus yang akan memungkinkan Anda untuk mempercepat waktu penyisipan untuk jawaban di atas:
Menonaktifkan autocommit ketika memasukkan banyak baris sangat mempercepat penyisipan, jadi matikan, kemudian jalankan seperti yang disebutkan di atas, atau cukup buat string (sqlCombined) yang merupakan banyak pernyataan insert yang dipisahkan oleh semi-titik dua dan multi-kueri akan menanganinya dengan baik.
Semoga ini membantu seseorang menghemat waktu (mencari dan menyisipkan!)
R
sumber
Anda selalu dapat menggunakan mysql
LOAD DATA
:untuk melakukan sisipan massal daripada menggunakan banyak
INSERT
pernyataan.sumber
LOCAL
bitnya.Ya, Anda tidak ingin mengeksekusi 1000 panggilan permintaan, tetapi melakukan ini tidak masalah:
Bergantung pada sumber data Anda, mengisi array mungkin semudah membuka file dan membuang konten ke dalam array melalui
file()
.sumber
sumber
Anda dapat melakukannya dengan beberapa cara misalnya di codeigniter
sumber
Meskipun sudah terlambat untuk menjawab pertanyaan ini. Inilah jawaban saya untuk hal yang sama.
Jika Anda menggunakan CodeIgniter maka Anda dapat menggunakan metode inbuilt yang didefinisikan dalam kelas query_builder.
$ this-> db-> insert_batch ()
Menghasilkan string yang dimasukkan berdasarkan data yang Anda berikan, dan menjalankan kueri. Anda bisa melewatkan array atau objek ke fungsi. Berikut ini contoh menggunakan array:
);
Parameter pertama akan berisi nama tabel, yang kedua adalah array nilai asosiatif.
Anda dapat menemukan detail lebih lanjut tentang query_builder di sini
sumber
Saya telah membuat kelas yang melakukan multi-line yang digunakan sebagai berikut:
di mana kelas didefinisikan sebagai berikut:
sumber
Gunakan masukkan batch dalam codeigniter untuk memasukkan beberapa baris data.
sumber
Saya telah membuat fungsi sederhana ini yang dapat Anda gunakan dengan mudah. Anda harus melewati nama
($tbl)
-tabel, bidang-tabel($insertFieldsArr)
terhadap data yang dimasukkan, array data($arr)
.sumber