我有一个 248 MB 的日志文件,它可以扩展到 GB。所以你可以想象可以有多少行。我需要将所有行导入到 SQL Server 数据库中的一个表中。为此,我首先创建一个 DataTable 并将日志文件中的所有行作为新行添加到该 DataTable 中。这发生得很快。在大约 30 秒内将超过一百万条记录添加到表中。在表中填满行后,我使用存储过程将 DataTable 中的记录导入数据库。然而,这个阶段执行得非常繁重。现在我想知道,如果我应该使用 SqlBulkCopy WriteToServer 方法,还是应该保持这种方式?如果 SqlBulkCopy 是更好的选择,那么我应该使用 DataTable 还是 IDataReader 版本。提前致谢。
问问题
2477 次
1 回答
4
我会使用 SqlBulkCopy 来导入任何像这样的真实卷的数据。与 SqlDataAdapter 的性能差异可能很大。例如,我将博客作为导入 100K 行的性能比较:
SqlBulkCopy:1.5885s
SqlDataAdapter:25.0729s
如果您将 TableLock 选项与 SqlBulkCopy 一起使用,您可以获得更大的吞吐量,在我的测试中,该选项将导入时间降至 0.8229 秒。
还值得注意的是,使用 SqlBulkCopy,您可以让多个实例将一段数据并行批量加载到同一个目标表中,而不会相互竞争。为另一个外部链接道歉,但我认为它是相关的。那是关于加载到没有索引的堆表中以获得最佳性能,这可能不是您当前场景的选择,但绝对值得了解。
于 2012-01-23T08:40:42.783 回答