我在C#中的内存(list<T>
和sortedlist<T,T>
)中有近70亿行数据。我想将此数据插入SQL Server中的表中。为此,我为每个集合定义了不同的SqlConnection
,并将连接池设置为False。
首先,我尝试使用连接模式(ExecuteNonQuery
)插入数据。即使我定义了Parallel.Invoke
并同时调用了不同集合的所有插入方法,它也太慢了,到现在为止我无法完成它(我无法区分顺序插入和并发插入之间的任何差异)。
另外,我尝试从SqlDataTable
创建一个对象。要填充表格,我会从集合中读取所有数据,然后将数据添加到SqlDataTable
。在这种情况下,我为SqlBatchSize=10000
设置了SqlTimeOut=0
和SqlBulkCopy
。但这个也很慢。
如何快速将大量数据插入SQL Server?
答案 0 :(得分:1)
寻找'BULK INSERT'。该技术适用于各种RDBMS。基本上,您创建一个(文本)文件,每个记录一行,并告诉服务器使用此文本文件。这是我能想到的最快的方法。我用这种方式在几秒内导入了5000万行。
答案 1 :(得分:1)
您已经发现SqlBulkCopy
,但您说它很慢。这可能是因为两个原因:
WriteToServer
的自定义IDataReader来流式传输行(或者只使用更大的DataTables)但是,你不能比批量导入更快。