Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kopiuj zbiorczo DataTable do MySQL (podobnie jak System.Data.SqlClient.SqlBulkCopy)

Nie wykluczaj możliwego rozwiązania opartego na bezpodstawnych założeniach. Właśnie przetestowałem wstawianie 100 000 wierszy z System.Data.DataTable do tabeli MySQL za pomocą standardowego MySqlDataAdapter#Update() wewnątrz Transaction . Uruchamianie trwało konsekwentnie około 30 sekund:

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

(Próbowałem kilku różnych wartości dla UpdateBatchSize ale nie wydawały się mieć znaczącego wpływu na upływ czasu).

Natomiast następujący kod przy użyciu MySqlBulkLoader uruchomienie zajęło tylko 5 lub 6 sekund...

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

... w tym czas na zrzucenie 100 000 wierszy z DataTable do tymczasowego pliku CSV (przy użyciu kodu podobnego do to ), ładowanie zbiorcze z tego pliku, a następnie usuwanie pliku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przechowywać pliki .pdf w MySQL jako bloki BLOB przy użyciu PHP?

  2. Przytnij z warunkiem

  3. Jak mogę używać Entity Framework na wykresie obiektów powyżej głębokości 2 z MySQL Connector/NET?

  4. Uciekanie ciągów za pomocą pythona mysql.connector

  5. MySql, PHP wyświetla obraz w HTml