【问题标题】:C# - SQL Insert and Update speedC# - SQL 插入和更新速度
【发布时间】:2014-04-16 16:51:31
【问题描述】:

我有一个大约 80,000 行的 CSV 文件,我正在尝试在 C# 应用程序中处理它并对我的 SQL 数据库进行必要的更改。我将 CSV 读入应用程序,这并不需要很长时间,然后我从那里处理它。

对于 CSV 中的每条记录,我要么插入一条新记录,要么根据条件(来自 SQL 选择语句)更新数据库中的现有记录。我只是使用 C# 内联 SQL 命令来执行我的选择、更新和插入。此过程大约需要 40 分钟才能完成。

我想知道是否有任何大型 SQL 数据库更新和插入的最佳实践能够加快该过程。

提前致谢!

【问题讨论】:

  • 有SQL Bulk Copy Operations (msdn.microsoft.com/en-us/library/7ek5da1a%28v=vs.110%29.aspx),或者如果您使用EntityFramework 6.0 或更高版本,您可以使用DbSet<T>.AddRange() 方法批量添加实体。
  • @martin_costello,就是这样。将该评论粘贴到答案中
  • 我不知道 AddRange 做了批量复制
  • 谢谢,我要试试批量复制操作。我不熟悉批量复制,是否应该将需要添加的所有内容都放入 DataTable 并在完成后运行批量复制?

标签: c# sql sql-server sql-update sql-insert


【解决方案1】:

【讨论】:

  • 谢谢,这很有效,大大减少了我的时间
【解决方案2】:

使用开始事务(之前)和提交(在所有工作之后)。如果您没有显式启动事务,对于您的每个命令,SQL 将隐式启动一个事务并完成它,从而延迟该过程(因此 80k 行意味着 80k 个单独的事务,而所有命令都应该在一个事务中运行。)。

【讨论】:

    【解决方案3】:

    你应该尝试使用 backgroundWorker... 当我不得不进行大量查询时,它帮助了我......

    How to use BackgroundWorker

    【讨论】:

    • 我已经在使用 backgroundWorker,所以我的 GUI 不会崩溃。我真的只是想优化速度。
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多