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

Salin massal DataTable ke MySQL (mirip dengan System.Data.SqlClient.SqlBulkCopy)

Jangan mengesampingkan kemungkinan solusi berdasarkan asumsi yang tidak berdasar. Saya baru saja menguji penyisipan 100.000 baris dari System.Data.DataTable ke dalam tabel MySQL menggunakan MySqlDataAdapter#Update() standar di dalam Transaction . Secara konsisten membutuhkan waktu sekitar 30 detik untuk dijalankan:

using (MySqlTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        cmd.Transaction = tran;
        cmd.CommandText = "SELECT * FROM testtable";
        using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
        {
            da.UpdateBatchSize = 1000;
            using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da))
            {
                da.Update(rawData);
                tran.Commit();
            }
        }
    }
}

(Saya mencoba beberapa nilai berbeda untuk UpdateBatchSize tetapi mereka tampaknya tidak memiliki dampak yang signifikan pada waktu yang telah berlalu.)

Sebaliknya, kode berikut menggunakan MySqlBulkLoader hanya butuh 5 atau 6 detik untuk menjalankan ...

string tempCsvFileSpec = @"C:\Users\Gord\Desktop\dump.csv";
using (StreamWriter writer = new StreamWriter(tempCsvFileSpec))
{
    Rfc4180Writer.WriteDataTable(rawData, writer, false);
}
var msbl = new MySqlBulkLoader(conn);
msbl.TableName = "testtable";
msbl.FileName = tempCsvFileSpec;
msbl.FieldTerminator = ",";
msbl.FieldQuotationCharacter = '"';
msbl.Load();
System.IO.File.Delete(tempCsvFileSpec);

... termasuk waktu untuk membuang 100.000 baris dari DataTable ke file CSV sementara (menggunakan kode yang mirip dengan ini ), memuat secara massal dari file itu, dan menghapus file setelahnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan pilih-masukkan baris mulitple mysql dengan last_insert_id()

  2. Driver MySQL apa yang tersedia untuk node.js?

  3. MySQL:Kode Kesalahan:1242 Subquery mengembalikan lebih dari 1 baris

  4. Saat mengimpor file mysqldump ERROR 1064 (42000) di dekat ' ■/ ' di baris 1

  5. Cara Menginstal WordPress:Perangkat Lunak Server