Sql server 2005 我应该使用SqlBulkCopy还是存储过程来导入数据
我有一个248MB的日志文件,它可以扩展到GB。因此,您可以想象可以有多少行。我需要将所有行导入SQL Server数据库中的一个表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这种情况发生得相当快。超过一百万条记录在大约30秒内被添加到表中。在用行填充表之后,我使用存储过程将DataTable中的记录导入数据库。然而,这一阶段的执行非常繁重。现在我想知道,是应该使用SqlBulkCopy WriteToServer方法,还是应该继续使用这种方法?如果SqlBulkCopy是一个更好的选择,那么我应该使用DataTable或IDataReader版本。提前感谢。我会使用SqlBulkCopy来导入任何像这样的实际卷的数据。与SqlDataAdapter相比,性能差异可能很大。e、 g.I作为导入10万行的性能比较: SqlBulkCopy:1.5885sSql server 2005 我应该使用SqlBulkCopy还是存储过程来导入数据,sql-server-2005,c#-4.0,bulk-load,Sql Server 2005,C# 4.0,Bulk Load,我有一个248MB的日志文件,它可以扩展到GB。因此,您可以想象可以有多少行。我需要将所有行导入SQL Server数据库中的一个表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这种情况发生得相当快。超过一百万条记录在大约30秒内被添加到表中。在用行填充表之后,我使用存储过程将DataTable中的记录导入数据库。然而,这一阶段的执行非常繁重。现在我想知道,是应该使用SqlBulkCopy WriteToServer方法,还是应该继续使用
SqlDataAdapter:25.0729s 如果将TableLock选项与SqlBulkCopy一起使用,您可以获得更大的吞吐量,在我的测试中,该选项将导入降低到0.8229s
还值得注意的是,使用SqlBulkCopy,您可以让多个实例并行地将一段数据大容量加载到同一个目标表中,而不会相互冲突。为另一个道歉,但我认为这是相关的。这是关于加载到堆表中,无索引,以获得最佳性能,这可能不是当前场景的选项,但绝对值得了解。对于任何实际卷的数据导入,我都会选择SqlBulkCopy。与SqlDataAdapter相比,性能差异可能很大。e、 g.I作为导入10万行的性能比较: SqlBulkCopy:1.5885s
SqlDataAdapter:25.0729s 如果将TableLock选项与SqlBulkCopy一起使用,您可以获得更大的吞吐量,在我的测试中,该选项将导入降低到0.8229s
还值得注意的是,使用SqlBulkCopy,您可以让多个实例并行地将一段数据大容量加载到同一个目标表中,而不会相互冲突。为另一个道歉,但我认为这是相关的。这是关于加载到堆表中,无索引,以获得最佳性能,这可能不是您当前场景的选项,但绝对值得了解。由于您对SqlBulkCopy进行了大量实践,您可能知道为什么会出现“超时过期。在完成之前超时时间已过…”错误。我将连接超时时间增加到600秒。但我在不到半分钟的时间内就发现了错误。请尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):非常感谢@AdaTheDev。你救了我很多钱time@AdaTheDev因此,您的答案和博客文章通过SqlDataAdapter比较了SqlBulkCopy和一系列insert语句,但存储过程呢?我可以将一个数据表作为自定义类型发送出去,并执行SELECT FROM INTO(或INSERT INTO FROM,我总是将这两个向后)。此时,我将作为单个SQL集操作执行插入。SqlBulkCopy在这里更好吗?如果是,原因是什么?@AVu-我去年写了一篇更新的博客文章,比较了不同数量的行,以及多线程与单线程:由于您对SqlBulkCopy进行了大量实践,您可能知道我为什么会出现“超时过期。在完成之前超时时间已过…”错误。我将连接超时时间增加到600秒。但我在不到半分钟的时间内就发现了错误。请尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):非常感谢@AdaTheDev。你救了我很多钱time@AdaTheDev因此,您的答案和博客文章通过SqlDataAdapter比较了SqlBulkCopy和一系列insert语句,但存储过程呢?我可以将一个数据表作为自定义类型发送出去,并执行SELECT FROM INTO(或INSERT INTO FROM,我总是将这两个向后)。此时,我将作为单个SQL集操作执行插入。SqlBulkCopy在这里更好吗?如果是,为什么?@AVu-我去年写了一篇更新的博客文章,比较了不同数量的行,以及多线程与单线程: