【问题标题】:Insert Query vs SqlBulkCopy - which one is best as performance wise for insert records from One `DataBase` to Another `DataBase`插入查询与 SqlBulkCopy - 哪一个最适合将记录从一个`DataBase` 插入到另一个`DataBase`
【发布时间】:2015-11-18 07:31:43
【问题描述】:

Insert QuerySqlBulkCopy - 哪一个对于将记录从一个 DataBase 插入到另一个 DataBase 的性能最好

我知道SQLBulkcopy 用于大量记录。

如果记录少于 10 个,那么哪个更好。

请分享你的观点。

【问题讨论】:

  • 我想如果你有 10 条记录,那么插入使用的可能性真的没关系,
  • 对于 100-1000 条记录,时间差异很小。但是如果你有更多的记录,blunkinsert 可以帮助你赢得时间

标签: c# .net sql-server


【解决方案1】:

由于您要求的记录少于 10 条,我建议您使用简单的插入查询。

但是如果你想使用 SQLBulkCopy 那么首先你应该知道什么时候使用它。

Read For Knowledge

批量插入

BULK INSERT 命令是将数据从文本文件导入 SQL Server 的进程内方法。因为它在 Sqlservr.exe 进程中运行,所以将数据文件加载到 SQL Server 中是一种非常快速的方法。

【讨论】:

    【解决方案2】:

    这里是 a link to a site 的一些基准测试。

    我过去曾广泛使用过SqlBulkCopy,它非常有效。但是,您可能需要重新设计表格才能有效地使用它。例如,当您使用SqlBulkCopy 时,您可能希望使用客户端生成的标识符,因此您必须发明一些方案来允许您生成稳定、健壮和可预测的 ID。这与使用自动生成的标识列插入到表中的典型插入非常不同。

    作为SqlBulkCopy 的替代方法,您可以使用我提供的链接中讨论的方法,在该方法中您使用union allinsert into 语句的组合,它也具有出色的性能。不过,随着数据集的增加,我认为SqlBulkCopy 将是更快的选择。此处可能需要一种混合方法,当记录数很高时切换到SqlBulkCopy

    我认为SqlBulkCopy 将胜出更大的数据集,但您需要了解SqlBulkCopy 操作可用于放弃一些检查。这当然会进一步加快速度,但也允许您违反对数据库施加的条件。

    【讨论】:

      【解决方案3】:

      IMO,就你而言,使用 SqlBulkCopy 太过分了..

      如果您的行数少于 1,000 左右,您可以使用用户定义类型 (UDT) 作为传递给存储过程的表值参数 (TVP)。在该阈值之后,SqlBulkCopy 的性能增益开始超过其初始开销。 SqlBulkCopy 最适用于 Heap Tables(没有聚集索引的表)。

      我发现这篇文章对我自己的解决方案很有帮助 - https://www.sentryone.com/blog/sqlbulkcopy-vs-table-valued-parameters-bulk-loading-data-into-sql-server

      【讨论】:

        猜你喜欢
        • 2014-02-12
        • 2017-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多