Dalam aplikasi saya, saya melakukan insert multi-baris ketika saya bisa hanya karena itu mengurangi jumlah perjalanan bolak-balik antara db dan aplikasi.
Namun, saya penasaran, apakah ada kelebihan lain? Misalnya, jika beberapa baris dimasukkan sekaligus seperti ini:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
melawan:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
dan tabel memiliki indeks, apakah indeks dihitung sekali dalam kasus pertama, dan dua kali dalam kasus kedua? Atau apakah itu selalu satu kali per insert? Asumsikan kedua kueri dalam transaksi yang sama.
Saya menggunakan PostgreSQL.
postgresql
index
optimization
cdmckay
sumber
sumber
Jawaban:
Saya pikir @a_horse_with_no_name benar tentang indeks diperbarui sekali per pernyataan, karena jika pernyataan belum menyelesaikan eksekusi, data tidak akan terlihat karena sedang dalam transaksi. Dan definisi pernyataan termasuk memiliki banyak nilai
Dan menurut dokumen di sini pembuatan / pembaruan indeks bekerja lebih efisien dengan batch daripada pernyataan tunggal.
Ada juga artikel bagus dari Peter Manis tentang kinerja berbagai metode Sisipan yang dapat saya rekomendasikan.
Hal lain yang perlu diingat adalah
FILLFACTOR
indeks karena hal itu berdampak pada kinerja seperti yang dijelaskan Fabien Coelho di sini .sumber
Saya tidak percaya saat ini ada perbedaan optimasi dalam hal pemeliharaan indeks dalam hal ini.
Selain overhead jaringan, keuntungan lain dari pernyataan multi-nilai adalah penguraian, penguncian, dll. (Meskipun penguncian tabel
tbl
diambil oleh pernyataan penyisipan pertama dan kemudian dipertahankan sepanjang sisa transaksi, setiap penyisipan pernyataan masih harus memverifikasi bahwa kunci dipegang, dan verifikasi ini tidak gratis)sumber