Sebenarnya, cara Anda menulisnya, opsi pertama Anda akan lebih cepat.
-
Contoh kedua Anda memiliki masalah di dalamnya. Anda melakukan sql =+ sql + dll. Ini akan menyebabkan objek string baru dibuat untuk setiap iterasi loop. (Lihat kelas StringBuilder). Secara teknis, Anda juga akan membuat objek string baru pada contoh pertama, tetapi perbedaannya adalah ia tidak harus menyalin semua informasi dari opsi string sebelumnya.
-
Cara Anda mengaturnya, SQL Server harus berpotensi mengevaluasi permintaan besar ketika Anda akhirnya mengirimnya yang pasti akan membutuhkan waktu untuk mencari tahu apa yang seharusnya dilakukan. Saya harus menyatakan, ini tergantung pada seberapa besar jumlah sisipan yang perlu Anda lakukan. Jika n kecil, Anda mungkin akan baik-baik saja, tetapi seiring bertambahnya masalah Anda hanya akan bertambah buruk.
Sisipan massal lebih cepat daripada yang individual karena cara SQL server menangani transaksi batch. Jika Anda akan memasukkan data dari C# Anda harus mengambil pendekatan pertama dan membungkus katakanlah setiap 500 sisipan ke dalam transaksi dan komit, lalu lakukan 500 berikutnya dan seterusnya. Ini juga memiliki keuntungan bahwa jika sebuah batch gagal, Anda dapat menjebaknya dan mencari tahu apa yang salah dan memasukkannya kembali hanya itu. Ada cara lain untuk melakukannya, tetapi itu pasti akan menjadi peningkatan dari dua contoh yang diberikan.
var iCounter = 0;
foreach (Employee item in employees)
{
if (iCounter == 0)
{
cmd.BeginTransaction;
}
string sql = @"INSERT INTO Mytable (id, name, salary)
values ('@id', '@name', '@salary')";
// replace @par with values
cmd.CommandText = sql; // cmd is IDbCommand
cmd.ExecuteNonQuery();
iCounter ++;
if(iCounter >= 500)
{
cmd.CommitTransaction;
iCounter = 0;
}
}
if(iCounter > 0)
cmd.CommitTransaction;