最適なパフォーマンスで DataTable を MySQL に一括コピー
Microsoft SQL Server から MySQL にプロジェクトを移行すると、データの一括コピーで課題が発生する可能性があります。これは、Microsoft のシステムにある一般的な SqlBulkCopy API が MySQL では直接利用できないためです。
一括コピーの代替手段
代替手段の 1 つは、MySqlBulkLoader クラスを使用することです。これには、データを CSV ファイルにエクスポートしてからインポートする必要があるため、パフォーマンスのボトルネックが発生する可能性があります。
MySqlDataAdapter を使用した最適化メソッド
ただし、より効率的なアプローチは次のとおりです。トランザクション内で MySqlDataAdapter の Update() メソッドを利用することで活用されます。このメソッドにより、構成可能な更新バッチ サイズでバッチ挿入が可能になり、実行時間を大幅に短縮できます。
コード例
MySqlDataAdapter アプローチを使用した最適化された例を次に示します。
<code class="csharp">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(); } } } }</code>
MySqlBulkLoader との比較
MySqlBulkLoader を使用する場合と比較すると、MySqlDataAdapter アプローチの方が実行速度の点で優れています。 100,000 行の一括挿入を伴うテストでは、MySqlDataAdapter を使用した場合の実行時間は 30 秒でしたが、MySqlBulkLoader は 5 ~ 6 秒でプロセスを完了しました。
結論
DataTable を MySQL に効率的に一括コピーするには、トランザクション内で MySqlDataAdapter の Update() メソッドを使用することを検討してください。このアプローチでは、中間の CSV エクスポートおよびインポートを必要とせずに最適なパフォーマンスが提供され、その結果、より高速かつ効率的なデータ移行が実現します。
以上がDataTable を MySQL に効率的に一括コピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。