1

我在数据库中有 2 个表。每个都有“名称”列和“计数”列。

我想仅在“名称”列相等的情况下从第一个表中的计数更新第二个表中的计数列。

例子:

第一张表:

名称计数

杰克 25
迈克 44

名称计数

杰克 23
迈克 9
大卫 88

结果(第二个表看起来像那样......)

名称计数

杰克 25
迈克 44
大卫 88

注意:
1. 两张桌子都很大。(虽然第二个表更大......)
2. 更新必须尽可能快......
(如果除了存储过程之外还有更多选项,我很乐意听到。)
3. “计数”定义为 bigint而“名称”为 nvarchar(100)
4. 第一个表中的“计数”字段始终大于
第二个表中的等值字段。

我认为有更多的选项(除了存储过程)可能与 MERGE 或 TRANSACTION 一样,只要它是最快的方式......

谢谢!

4

1 回答 1

2

最好的方法是保持简单

UPDATE Table2
SET Count = t1.Count
FROM Table1
WHERE Table2.Name = Table1.Name 
  AND Table2.Count <> Table1.Count

如果由于表的大小而导致此查询的性能不令人满意,最好的解决方案是根据名称字段对表进行分区。然后可以使用基于名称的额外过滤器同时从不同线程运行查询以满足分区函数。

例如:(假设名称是 varchar(20) 列)

UPDATE Table2
SET Count = t1.Count
FROM Table1
WHERE Table2.Name = Table1.Name 
  AND Table2.Count <> Table1.Count
  AND Table2.Name between cast('Jack' as varchar(20)) 
                      and cast('Mike' as varchar(20))

(字符串的强制转换对于 Sql Server 正确进行分区消除有很大帮助。)

于 2011-02-17T22:22:41.787 回答