2012-12-08 68 views
2

我在內存中有近70億行數據(list<T>sortedlist<T,T>)在C#中。我想將這些數據插入到SQL Server的表中。爲此,我爲每個集合定義了不同的SqlConnection,並將連接池設置爲False。從C#插入數據到SQL Server 2008 R2

首先,我試圖用連接模式插入數據(ExecuteNonQuery)。即使我定義了Parallel.Invoke並同時爲不同的集合調用了所有的插入方法,但速度太慢,直到現在我無法完成它(我無法區分順序插入和併發插入之間的差異)。

此外,我試圖從SqlDataTable創建一個對象。爲了填表,我從集合中讀取所有數據一次,並將數據添加到SqlDataTable。在這種情況下,我爲SqlBulkCopy設置了SqlBatchSize=10000SqlTimeOut=0。但是這個也很慢。

如何快速將大量數據插入SQL Server?

+0

你使用SQL Server嗎? –

+0

是的SQL Server 2008 R2 – mohammad

回答

1

尋找'BULK INSERT'。該技術適用於各種RDBMS。基本上,你創建一個(文本)文件,每條記錄有一行,並告訴服務器使用這個文本文件。這是我能想到的最快的方法。我在幾秒鐘內以這種方式導入5000萬行。

1

您已經發現SqlBulkCopy但您說這很慢。這可能是由於兩個原因:

  1. 您使用的批次太小。嘗試使用傳遞到WriteToServer(或僅使用更大的數據表)的自定義IDataReader來流式傳輸行
  2. 您的表具有非聚簇索引。禁用它們預導入並重新生成它們

雖然不能比使用批量導入更快。

相關問題