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

How to optimize an update on a huge table joining with another table?

我在数据仓库环境中有一个要求,对于现有的 table(比如说 table "A"),在 table,需要再添加 50 列,但是由于 table 已经很大很宽,源系统无法容纳它,我将接收并加载扩展的 table(说 table "B") 有 50 个新列,并且在两个 table 中都有一个 SurrogateKey,所以新的 table 也将保存 1 亿条记录。但是51列。 tableB中的SurrogateKey是一个Identity列,所以它自己生成Key。

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

为了维护 table A 中的 SurrogateKey,一旦加载了两个 table,我将不得不 运行 一个包含以下代码的过程来更新 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

考虑到我在 table 上都没有 PK 或任何索引,添加 PK 或索引的建议是什么,以便在更新 table 时获得最佳性能A,以及加入A和B。

This article可以解释给你更好的理解。

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

简而言之,

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

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