SqlBulkCopy 像糖蜜一样慢

2024-02-15

我正在寻找通过 C# 加载批量数据的最快方法。我有这个脚本可以完成这项工作,但速度很慢。我读到的证词表明 SqlBulkCopy 是最快的。
1000条记录2.5秒。文件包含接近 5000 到 250k 的记录 有哪些事情可以减慢它的速度?

表定义:

CREATE TABLE [dbo].[tempDispositions](
    [QuotaGroup] [varchar](100) NULL,
    [Country] [varchar](50) NULL,
    [ServiceGroup] [varchar](50) NULL,
    [Language] [varchar](50) NULL,
    [ContactChannel] [varchar](10) NULL,
    [TrackingID] [varchar](20) NULL,
    [CaseClosedDate] [varchar](25) NULL,
    [MSFTRep] [varchar](50) NULL,
    [CustEmail] [varchar](100) NULL,
    [CustPhone] [varchar](100) NULL,
    [CustomerName] [nvarchar](100) NULL,
    [ProductFamily] [varchar](35) NULL,
    [ProductSubType] [varchar](255) NULL,
    [CandidateReceivedDate] [varchar](25) NULL,
    [SurveyMode] [varchar](1) NULL,
    [SurveyWaveStartDate] [varchar](25) NULL,
    [SurveyInvitationDate] [varchar](25) NULL,
    [SurveyReminderDate] [varchar](25) NULL,
    [SurveyCompleteDate] [varchar](25) NULL,
    [OptOutDate] [varchar](25) NULL,
    [SurveyWaveEndDate] [varchar](25) NULL,
    [DispositionCode] [varchar](5) NULL,
    [SurveyName] [varchar](20) NULL,
    [SurveyVendor] [varchar](20) NULL,
    [BusinessUnitName] [varchar](25) NULL,
    [UploadId] [int] NULL,
    [LineNumber] [int] NULL,
    [BusinessUnitSubgroup] [varchar](25) NULL,
    [FileDate] [datetime] NULL
) ON [PRIMARY]

这是代码

    private void BulkLoadContent(DataTable dt)
    {
        OnMessage("Bulk loading records to temp table");
        OnSubMessage("Bulk Load Started");
        using (SqlBulkCopy bcp = new SqlBulkCopy(conn))
        {
            bcp.DestinationTableName = "dbo.tempDispositions";
            bcp.BulkCopyTimeout = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                bcp.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
            }
            bcp.NotifyAfter = 2000;
            bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
            bcp.WriteToServer(dt);
            bcp.Close();
        }
    }

该表上有任何索引、触发器或约束吗?

这将导致插入速度减慢——尤其是聚集索引会受到损害。 当您正在处理大量数据时,最好先删除索引,然后再重新应用它们。

关于它的一个好帖子在这里:在SQL Server(C#客户端)中批量插入大量数据的最快方法是什么 https://stackoverflow.com/questions/24200/whats-the-fastest-way-to-bulk-insert-a-lot-of-data-in-sql-server-c-client

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlBulkCopy 像糖蜜一样慢 的相关文章

随机推荐

  • 使用 function-java 向 Java 生产项目添加闭包有多安全?

    我很想在 Java 中使用闭包 我读到过 它们可能会也可能不会进入 Java 7 但是有一个名为函数式java http code google com p functionaljava 已经实现了包括闭包在内的功能特性 在企业生产应用程序
  • 在 group_by() %>% mutate() 函数调用中使用带引号的变量

    可重现的例子 cats lt data frame name c letters 1 10 weight c rnorm 5 10 1 rnorm 5 20 3 type c rep not fat 5 rep fat 5 get mean
  • 在 Elixir 中测试异步代码

    我想测试一个正在使用的函数Task async 为了让我的测试通过 我需要让它在断言之前休眠 100 毫秒 否则测试进程会在执行异步任务之前被终止 有没有更好的办法 编辑 添加代码示例 我想测试的代码 大致 def search param
  • 设置新行Datagrid的内容

    我有一个 DataGrid 显示一些具有相当多列的数据库 我希望当用户编辑新行时 会自动设置一些值 对于窗口形式的 DataGrid 这会很容易 因为有 RowsAdded 事件处理程序 但我如何用 wpf DataGrid 处理这个问题
  • SQL Server 触发器从视图添加/更新表

    我有一个表 我想在将新行添加到视图时添加 更新该表 但我正在努力完成这项工作 我的目标表是课程学习者进度 我的观点是Quiz Results For Course Learner Progress 我已经从记录测验分数的表创建了视图 并由
  • 如何处理 Retrofit 2 中不同类型的响应

    在 Web Api 中返回 JSON 字段可以属于不同的类 someField some string someField en some string ka 我见过一些解决方案 但这是在以前版本的 Retrofit 上 我的 pojo 类
  • Flutter - 错误:没有为“Object”类型定义 getter“docs”

    我正在开发 Flutter 2 2 1 通道稳定 我最近将 SDK 的环境从 2 7 0 更改为 2 12 0 sdk gt 2 12 0 lt 3 0 0 为了添加插件 我遇到了很多错误 尤其是关于零安全性 其中之一是关于从 firest
  • Hibernate 查询集合中的多个项目

    我有一个看起来像这样的数据模型 public class Item private List
  • VsCode 现在在调试模式下在原始 jsx 文件上显示 main.chunk.js

    之前我总是直接在jsx组件文件中调试vscode中的reactjs应用程序 现在我不能这样做 因为当我尝试调试 vscode 时尝试调试一个名为 main chunk js 的文件 我也在用铬 vs Code 调试 main chunk j
  • 错误 MSB3073:命令“npm install”退出,代码为 1

    我正在容器化我的 Net React js 应用程序 但在此过程中我遇到了意外错误 我熟悉了类似的帖子 但没有一个解决方案能解决我的问题 由于构建日志很长 我已将其放入 Pastebin 中 https pastebin com PhfYW
  • C++ 在 Windows 上禁用延迟确认

    我试图在 Windows 计算机上复制实时应用程序 以便能够更轻松地进行调试和更改 但我遇到了延迟确认问题 我已经禁用了 nagle 并确认它提高了一点速度 当发送大量小数据包时 窗口不会立即 ACK 并延迟 200 毫秒 做了更多的研究
  • 关于 HTML 5 中的地理定位

    现在 Google 地图可以在 Firefox 的帮助下以街道精度精确定位我的位置 我知道这是 HTML 5 兼容浏览器的一项新功能 并且该位置是通过使用连接的 WiFi 网络的某种功能来获取的 我希望我没有做出任何愚蠢的假设 我想知道的是
  • 哪条 C++14 规则禁止 constexpr 函数对数据成员进行赋值?

    我的理解是这个 无意义的 代码不是有效的 C 14 class Point public constexpr double setX double newX return x newX private double x 我试图找出 C 14
  • 如何控制 JAX-WS 中的 JAXBContext?

    我需要为每个客户部署相同的 Web 服务 这 javax jws WebService uses Object作为方法参数和返回类型 导致
  • 按钮溢出隐藏不起作用

    我有以下内容 小提琴链接 http jsfiddle net gxe3d59u html
  • 使用 SFINAE 定义一个要求函数不存在的函数是否可以?

    这个问题中的代码基于这个答案 https stackoverflow com a 73307583 4117728 我有点困惑它是如何产生输出的 以及它是否都定义良好 include
  • NSURLConnection 和保持活动状态

    我的客户端应用程序中有一个使用 NSURLConnection 的小错误 我已经追踪到一个意外的连接保持活动 这似乎使网络服务器感到困惑 可能是服务器端的错误 解决方法是在某个时刻强制关闭所有未完成的连接 我可以用 NSURLConnect
  • 在QT中读取window的注册表

    我想列出通过从 HKEY CURRENT USER 读取卸载注册表文件来安装的所有应用程序 但出于某种安全原因 我猜 看起来不能通过使用 QSettings 来完成 QSettings maya HKEY LOCAL MACHINE SOF
  • Stream.CopyTo - 如何获取发送的字节?

    我尝试获取 ftp 上传的传输速度 但我不知道应该在哪里 获取 它 代码片段 FtpWebRequest request FtpWebRequest WebRequest Create job GetDestinationFolder fi
  • SqlBulkCopy 像糖蜜一样慢

    我正在寻找通过 C 加载批量数据的最快方法 我有这个脚本可以完成这项工作 但速度很慢 我读到的证词表明 SqlBulkCopy 是最快的 1000条记录2 5秒 文件包含接近 5000 到 250k 的记录 有哪些事情可以减慢它的速度 表定