Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sao chép hàng loạt DataTable vào MySQL (tương tự như System.Data.SqlClient.SqlBulkCopy)

Không loại trừ một giải pháp khả thi dựa trên những giả định vô căn cứ. Tôi vừa thử nghiệm việc chèn 100.000 hàng từ System.Data.DataTable vào bảng MySQL bằng MySqlDataAdapter#Update() tiêu chuẩn bên trong Transaction . Liên tục mất khoảng 30 giây để chạy:

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();
            }
        }
    }
}

(Tôi đã thử một vài giá trị khác nhau cho UpdateBatchSize nhưng chúng dường như không có tác động đáng kể đến thời gian đã trôi qua.)

Ngược lại, mã sau sử dụng MySqlBulkLoader chỉ mất 5 hoặc 6 giây để chạy ...

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);

... bao gồm cả thời gian để kết xuất 100.000 hàng từ DataTable sang tệp CSV tạm thời (sử dụng mã tương tự như this ), tải hàng loạt từ tệp đó và xóa tệp sau đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn số lượng / bản sao

  2. Nó được phát âm là “S-Q-L” hay “Phần tiếp theo”?

  3. rake db:tạo được tạo nếu bạn đặt bộ ký tự theo cách thủ công, đảm bảo rằng bạn có lỗi đối chiếu khớp

  4. MySQL ON DUPLICATE KEY UPDATE lỗi cú pháp

  5. SQL-alchemy:ValueError có quá nhiều giá trị để giải nén?