Bagaimana cara memasukkan sejumlah besar catatan ke database dalam waktu singkat?

8

Saya harus memasukkan banyak catatan ( 500.000 ) ke database sekaligus, menggunakan cara tercepat. Saya sudah mencoba memasukkan 1.700 catatan sekaligus tetapi butuh dua puluh menit !! Saya menggunakan SQL-SERVER, dan C#.

Meskipun tabel berikut tidak akan berkontribusi pada teknik penyisipan cepat, saya tetap memutuskan untuk menautkannya sehingga Anda mendapatkan pemahaman yang lebih baik tentang jumlah bidang yang perlu saya sisipkan (duplikat sekitar 500K ).

Lapangan

Ori Ben Ezra
sumber

Jawaban:

12

Ada beberapa opsi. Berikut adalah yang utama yang muncul di pikiran.

SSIS - SQL Server Integration Services: Ini adalah alat SQL Server ETL dan Anda dapat memindahkan data dari hampir semua sumber ke hampir semua tujuan dan itu bisa sangat cepat.

BCP - Program Salinan Massal: Ini adalah alat baris perintah yang dilengkapi dengan SQL Server. Ini sangat bagus untuk memindahkan file teks ke SQL Server atau Anda dapat mengekspor ke format asli dari satu SQL Server dan mengimpor menggunakan format yang sama ke SQL Server lain. BCP juga sangat cepat tetapi sedikit lebih terbatas daripada SSIS.

INSERT INTO tablename SELECT fieldlist DARI tabel lain : Ini mengasumsikan bahwa Anda bergerak dari satu tabel SQL ke yang lain pada server yang sama. Ini adalah yang tercepat tetapi pada baris 500k Anda sedang melihat transaksi yang cukup besar atau harus memecahnya seperti yang Anda katakan.

OPENROWSET : Ini adalah fungsi SQL Server yang akan memungkinkan Anda menarik data ke dalam tabel dari berbagai format. Seharusnya juga cukup cepat tetapi saya belum banyak bekerja.

Catatan umum: Kunci utama Anda adalah mbr_id. Jika ini adalah sesuatu yang disimpan dalam data sumber Anda (bukan kolom identitas), sisipan Anda akan JAUH lebih cepat jika data sumber dalam urutan mbr_id.

Kenneth Fisher
sumber
0

Karena Anda menggunakan. NET, Anda benar-benar dapat melakukan streaming data tanpa memanggil proses eksternal. Anda akan menggunakan Parameter Table-Valued. Lihat jawaban saya di StackOverflow untuk detail dan tautan ke variasi lain dari metode ini:

https://stackoverflow.com/a/25815939/577765

Solomon Rutzky
sumber
0

Untuk membuatnya lebih cepat (terutama jika ini adalah populasi awal dari sebuah tabel) lihat tentang menghapus indeks juga.

Josh Simar
sumber