如何优化与另一个表连接的巨大表的更新?

时间:2019-02-13 10:53:08

标签: sql-server indexing query-performance

我在数据仓库环境中,并且有一个要求,即对于一个现有的表(说表“ A”),该表具有约450列且该表中有1亿条记录,则需要再添加50列,但是作为该表已经很大并且很宽,并且源系统无法容纳它,所以我将接收并加载带有50个新列的扩展表(说表“ B”),并且两个表中都有一个SurrogateKey,所以新表也是如此将拥有1亿条记录。但是51列。 表B中的SurrogateKey是Identity列,因此它本身会生成Key。

我需要代理键,因为它将用于优化报告层。

为了维护表A中的SurrogateKey,两个表都加载后,我将必须运行一个包含以下代码的过程来更新A中的SK:

Update A
SET SK=B.SK
from A JOIN B
ON A.c1=B.c1 AND
A.c2=B.c2 AND
A.c3=B.c3 AND
A.c4=B.c4

考虑到两个表上都没有PK或任何索引,建议添加PK或索引是什么,以便在更新表A以及连接A和B时获得最佳性能。 / p>

2 个答案:

答案 0 :(得分:2)

如果直接更新表A,则添加索引会降低更新性能。 我建议创建主键和必需的索引,然后使用临时表更新记录,然后可以截断并加载表A。

简而言之,

  1. 使用与表A相同的结构创建一个临时表。
  2. 将表A中的数据加载到临时表中,并使用表更新代理键 B(具有有助于更快阅读的索引)。
  3. 截断表A并从临时表中加载更新的数据。

希望这种方法会有所帮助。 让我知道这是否适合您。

答案 1 :(得分:0)

This article可以更好地向您解释。