Soalan
Dalam peralihan daripada Microsoft SQL Server kepada MySQL, bagaimanakah boleh pukal penyalinan Jadual Data boleh dicapai tanpa mengorbankan prestasi?
Jawapan
Walaupun nampaknya intuitif untuk mengelak daripada menulis pada fail CSV sebelum memasukkan data, penanda aras prestasi menunjukkan sebaliknya. Menggunakan kelas MySqlBulkLoader untuk memuatkan data secara pukal daripada fail CSV dengan ketara mengatasi prestasi sisipan langsung dengan MySqlDataAdapter.
Pelaksanaan:
<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>
Kod ini membuang Jadual Data ke dalam fail CSV sementara, memuatkan data secara pukal, dan kemudian memadamkan fail tersebut. Penandaarasan menunjukkan bahawa pendekatan ini hanya mengambil masa 5-6 saat, termasuk masa untuk operasi I/O fail. Sebaliknya, sisipan terus dengan MySqlDataAdapter mengambil masa kira-kira 30 saat.
Atas ialah kandungan terperinci Bagaimanakah Penyalinan Pukal Jadual Data Boleh Dicapai dalam MySQL Sambil Mengekalkan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!