如何优化与另一个 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.
简而言之,
- 创建一个与 table A.
具有相同结构的临时 table
- 将 table A 中的数据加载到临时 table 并使用 table 更新代理键
B(有索引,有助于加快阅读速度)。
- 截断 table A 并从临时 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.
简而言之,
- 创建一个与 table A. 具有相同结构的临时 table
- 将 table A 中的数据加载到临时 table 并使用 table 更新代理键 B(有索引,有助于加快阅读速度)。
- 截断 table A 并从临时 table. 加载更新数据
希望这种方法能有所帮助。 如果这对你有用,请告诉我。