【问题标题】:LINQ-To-Sql Update - Performance IssuesLINQ-To-Sql 更新 - 性能问题
【发布时间】:2011-03-25 01:49:24
【问题描述】:

我有一个包含 230 列和 1200 万行的表。

我需要更新每行的 123 个字段。

如果我尝试使用 LINQ-To-Sql 执行此操作,则会收到 System.OutOfMemory 异常。

我知道如果我禁用对象跟踪,我不会收到 OutofMemory 错误。 但我认为如果禁用对象跟踪,我将无法执行更新。

更新它们的最佳方法是什么?

【问题讨论】:

  • 每行123个字段的值会不一样吗?它们可以用一些公式计算吗?换句话说,你能用一条 SQL UPDATE 语句来做这个操作吗?
  • 我假设您在每一行中设置相同的数据,因为您将无法在内存中保存这么多对象?简单的答案是使用存储过程,并将其拖到您的 EDML 文件中。
  • 230 列听起来很可疑......
  • @Mitch - 230 列需要在 123 列中更新表中所有记录的相同数据,这听起来更令人怀疑...
  • 每一行的列都有不同的值。它是为每一行计算的。

标签: c# sql-server linq linq-to-sql


【解决方案1】:

这不是适合 LINQ-to-SQL 或坦率地说任何 ORM 的任务。您不想希望以这种方式将那么多数据两次拖到网络上;理想情况下应该用纯 TSQL 编写,如果您需要与其他来源的数据组合,可能使用批量插入/SqlBulkCopy 填充单独的表。

【讨论】:

    【解决方案2】:

    我绝对建议您更改架构,将大表解耦为几个小表,并且绝对避免使用 linq-to-sql 处理这么多数据。

    以这样的方式创建体系结构,即您在业务级别为每个实体都有类,这些类将调用 T-SQL 查询的存储过程来更新数据访问级别的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多