在数据库中插入许多记录的最快方法

时间:2010-07-14 07:33:57

标签: c# sql-server sql-server-2005

我使用2种方法在数据库(100,1.000,10.000和100.000)中插入记录 (是没有主键且没有索引的表)

  • 使用for和逐个插入
  • 使用存储过程

使用存储过程当然更好。 我的问题是:1)如果我使用索引将操作更快和2)是否有任何其他方式来插入

PS:我使用ibatis作为ORM,如果这有任何区别

4 个答案:

答案 0 :(得分:5)

查看SqlBulkCopy

它专为快速插入批量数据而设计。我发现使用TableLock选项并设置大约10,000的BatchSize时速度最快,但最好用自己的数据测试不同的场景。

您可能还会发现以下内容有用。

SQLBulkCopy Performance Analysis

答案 1 :(得分:2)

不,我怀疑,如果您使用索引,它实际上将更慢。那是因为它必须更新索引以及插入数据。

如果您有理由确定数据没有重复键,请在插入所有行后添加索引。这样,它可以构建一次而不是在每个插入中添加和重新平衡。

这是DBMS的功能。我知道我经常使用的那个(不是SQLServer)是真的。

答案 2 :(得分:1)

我知道这有点偏离主题,但遗憾的是你没有使用SQL Server 2008,因为随着MERGE语句和用户定义的表类型的出现,这个领域已经有了很大的改进(允许您将数据的“表”传递给存储过程或语句,以便您可以一次性插入/更新许多记录。

有关更多信息,请查看http://www.sql-server-helper.com/sql-server-2008/merge-statement-with-table-valued-parameters.aspx

答案 3 :(得分:0)