TableB (Value1 VARCHAR)| 方案 | SQL 2000 | SQL 2008 | 關鍵技術點 |
|---|---|---|---|
| 1. 基本 INSERT 迴圈 | 901,599 | 497,638 | 10 萬/批次,10 批次,各自交易,單行 INSERT ... VALUES |
| 2. BULK INSERT | 4,009 | 10,722 | 預生成文字檔,FIELDTERMINATOR=',' ROWTERMINATOR='|' BATCHSIZE=100000 |
| 3. 多執行緒 BULK INSERT | 21,099 | 10,997 | 5 執行緒,各 20 萬,5 萬/批次,並行寫入 |
| 4. SqlBulkCopy (單執行緒) | 4,989 | 10,412 | BatchSize=100000, BulkCopyTimeout=60, ColumnMappings, DataTable 記憶體載入 |
| 5. 多執行緒 SqlBulkCopy | 7,682 | 10,870 | 5 執行緒,各 20 萬,5 萬/批次 |
BULK INSERT 單執行緒僅 4 秒,遠快於 SQL 2008(10 秒+)DataTable,大欄位/寬表易致 OOM,64 位元進程緩解SIMPLE 或 BULK_LOGGED,配合 TABLOCK 提示MAXDOP 限制並行,避免排序/日誌爭用百萬級導入單執行緒 BULK INSERT 是效能與穩定性的最佳平衡點。SQL 2008 在此場景未展現優勢,提醒我們:版本升級 ≠ 所有負載自動變快,需針對具體工作負載基準測試。