【问题标题】:update varbinary field from another table从另一个表更新 varbinary 字段
【发布时间】:2018-09-14 04:14:01
【问题描述】:

我正在尝试从 TABLE_B varbinary 字段更新 TABLE_A varbinary 列。两个表中有 280,000 个文档。我已经使用 c# 代码将文件系统中的所有这些文档递归地插入到 TABLE_B varbinary 列中。大约花了 3 个小时才完成。现在我正在尝试使用此查询从 TABLE_B 更新 TABLE_A 行。它在 11 小时前开始,并且仍在运行。我在两列上都应用了索引。我很感激任何建议。

UPDATE T1
SET T1.doc = T2.doc
FROM TABLE_A T1
INNER JOIN TABLE_B T2
    ON rtrim(ltrim(T1.path)) = rtrim(ltrim(T2.path))

【问题讨论】:

  • doc 字段是实际文档的内容吗?桌子有多大?至少我会建议在此之前在表上执行 rtrim + ltrim,并将其从更新中删除,因为它很容易导致索引不被使用
  • 是的。约 250GB。将尝试删除 rtrim、ltrim 并再次运行它。谢谢
  • 了解索引会减慢插入和更新速度,但会加快读取速度,因此这里有一个问题。不过我would do this in batches。比如:dba.stackexchange.com/a/86520/95107

标签: c# sql-server tsql sql-server-2016


【解决方案1】:
select 1;
while(@@ROWCOUNT > 0)
begin
   UPDATE TOP(5) T1
   SET T1.doc = T2.doc
   FROM TABLE_A T1
   INNER JOIN TABLE_B T2
   ON rtrim(ltrim(T1.path)) = rtrim(ltrim(T2.path))
end

您可以按照上面给出的批量进行更新。一次更新所有行需要很长时间

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 2015-10-03
    • 2011-02-15
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多