| 方法 | SQL 2000 | SQL 2008 | 關鍵技術點 |
|---|---|---|---|
| 1. 基本 INSERT (10 萬/批次,10 批次) | 901,599 | 497,638 | 單陳述式、逐筆解析、大量往返、記錄檔寫入頻繁 |
| 2. BULK INSERT (單執行緒,10 萬/批次) | 4,009 | 10,722 | 最小記錄、直接匯入資料頁、繞過大部分解析/鎖定 |
| 3. BULK INSERT (5 執行緒,各 20 萬,5 萬/批次) | 21,099 | 10,997 | 並行但受限於磁碟 I/O、鎖競爭、SQL 2000 鎖升級嚴重 |
| 4. SqlBulkCopy (單執行緒,10 萬/批次) | 4,989 | 10,412 | ADO.NET 管理代碼、記憶體緩衝、最小記錄、高效流式寫入 |
| 5. SqlBulkCopy (5 執行緒,各 20 萬,5 萬/批次) | 7,682 | 10,870 | 多執行緒爭用緩衝區/連線,SQL 2008 並無顯著提升 |
BULK INSERT TableB
FROM 'C:\data\bulk.txt'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '|',
BATCHSIZE = 100000
);
using (var sqlBC = new SqlBulkCopy(connStr)) {
sqlBC.BatchSize = 100000;
sqlBC.BulkCopyTimeout = 60;
sqlBC.DestinationTableName = "dbo.TableB";
sqlBC.ColumnMappings.Add("ValueA", "Value1"); // DataTable 欄位 -> 資料表欄位
sqlBC.WriteToServer(dataTable); // dataTable 含 100 萬列
}
百萬筆資料 4 秒級匯入,**BULK INSERT** 與 **SqlBulkCopy** 同屬最小記錄批次匯入機制,性能極致接近。單執行緒即可榨乾單磁碟 I/O,多執行緒需硬體架構配合。選型核心:程式整合度 → `SqlBulkCopy`;純資料庫端腳本 → `BULK INSERT`。切記:索引、約束、復原模式的前後配合才是決定成敗的關鍵。