ホームページ  >  記事  >  データベース  >  MySQL でパフォーマンスを維持しながら DataTable の一括コピーを実現するにはどうすればよいでしょうか?

MySQL でパフォーマンスを維持しながら DataTable の一括コピーを実現するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-10-24 06:14:02839ブラウズ

How Can Bulk Copying of DataTables Be Achieved in MySQL While Maintaining Performance?

MySQLBulkLoader を使用して DataTable を一括コピーする

質問

Microsoft SQL Server から MySQL に移行する場合、どうすれば一括コピーできますかDataTable のコピーはパフォーマンスを犠牲にすることなく実現できますか?

回答

データを挿入する前に CSV ファイルへの書き込みを回避するのは直感的に思えるかもしれませんが、パフォーマンス ベンチマークはそうではないことを示しています。 MySqlBulkLoader クラスを使用して CSV ファイルからデータを一括ロードすると、MySqlDataAdapter を使用した直接挿入よりも大幅にパフォーマンスが向上します。

実装:

<code class="csharp">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);</code>

このコードは DataTable を次の場所にダンプします。一時 CSV ファイルを作成し、データを一括ロードしてから、ファイルを削除します。ベンチマークの結果、このアプローチでは、ファイル I/O 操作の時間を含めて、わずか 5 ~ 6 秒しかかからないことがわかりました。対照的に、MySqlDataAdapter を使用した直接挿入には約 30 秒かかります。

以上がMySQL でパフォーマンスを維持しながら DataTable の一括コピーを実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。