【问题标题】:Batch update table with 2 million rows200万行批量更新表
【发布时间】:2011-09-10 00:23:15
【问题描述】:

大家好,我有一个有趣的任务是更新大约有 200 万行的表中的单个列。我已经尝试使用 MVC 实体框架执行此操作,但是我遇到了“内存不足异常”,我只是想知道是否还有其他方法。

有趣的是,它不仅仅是一个简单的更新。该过程需要读取表中已有的TelephoneNumber 列,例如,这可能是014812001。然后它需要根据大于 1 的出现次数来计算这个数字的分数。例如,使用上面的数字,这将得到 6,因为我们有 3 x 1 和 3 x 0,总共是 6。

一旦计算出这个分数,这个数字就需要插入到当前行的a列中进行处理,所以在我们的例子中是TelephoneNumber = 014812001的行。

这可以使用 TSQL 还是继续使用我的实体框架方法更好?

【问题讨论】:

  • 您能否至少提供一些 EF 代码来说明您尝试执行的操作以及发生内存不足异常的位置?
  • 嗯.....基于我有限的数学,这个数字014812001恰好有3次出现大于1的密码 - 有一个4,一个82 ...你如何得到这个分数的 6 分???

标签: tsql sql-server-2008 asp.net-mvc-3 c#-4.0 entity-framework-4


【解决方案1】:

对于这样的批量更新,我总是建议在服务器本身上执行此操作 - 拖下 200 万行,更新单个列,然后将它们推回再次服务器.....

我认为根据您的描述,创建一个小的 T-SQL 用户定义函数来计算这个分数应该是相当简单的。一旦你有了它,你就可以发出一条 T-SQL 语句:

UPDATE dbo.YourTable
SET Score = dbo.fnCalculateScore(TelephoneNumber)
WHERE .... (whatever condition you might have) .....

这应该比您的实体框架方法快几个数量级......

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 2014-06-28
    • 2020-07-22
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2011-08-31
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多