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

问题描述 投票:0回答:2

我在数据仓库环境中有一个要求,对于一个现有的表(Say表“A”),表中有大约450列,表中有1亿条记录,需要添加另外50列,但是因为表格已经很大了和广泛的,源系统无法容纳它,我将接收和加载一个扩展表(Say表“B”)与50个新列,并在两个表中的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.

sql-server indexing query-performance
2个回答
2
投票

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

简而言之,

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

希望这种方法应该有所帮助。如果这对您有用,请告诉我。


0
投票

This article可以更好地理解你。

© www.soinside.com 2019 - 2024. All rights reserved.