2

我在 C#的内存(list<T>和)中有近 70 亿行数据。sortedlist<T,T>我想将此数据插入到 SQL Server 中的表中。为此,我SqlConnection为每个集合定义不同的并将连接池设置为 False。

首先,我尝试使用连接模式 ( ExecuteNonQuery) 插入数据。即使我同时定义Parallel.Invoke并调用了不同集合的所有插入方法,它也太慢了,直到现在我都无法完成它(我无法区分顺序插入和并发插入之间的任何差异)。

另外,我尝试从SqlDataTable. 为了填充表格,我从集合中读取所有数据一次并将数据添加到SqlDataTable. 在这种情况下,我设置SqlBatchSize=10000SqlTimeOut=0SqlBulkCopy. 但是这个也很慢。

如何快速将大量数据插入 SQL Server?

4

2 回答 2

1

你已经发现了SqlBulkCopy,但你说它很慢。这可能是由于两个原因:

  1. 您使用的批次太小。尝试使用您传递给的自定义 IDataReader 流式传输行WriteToServer(或仅使用更大的 DataTables)
  2. 您的表具有非聚集索引。在导入前禁用它们并重新生成它们

但是,您不能比批量导入更快。

于 2012-12-08T22:40:25.467 回答
1

寻找“批量插入”。该技术可用于各种 RDBMS。基本上,您创建一个(文本)文件,每条记录一行,并告诉服务器使用此文本文件。这是我能想到的最快的方法。我以这种方式在几秒钟内导入了 5000 万行。

于 2012-12-08T17:26:37.187 回答