代码之家  ›  专栏  ›  技术社区  ›  Raghav Rao

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

  •  0
  • Raghav Rao  · 技术社区  · 5 年前

    我在一个数据仓库环境中,我有一个要求,即对于一个现有的表(比如表“a”)有大约450列,表中有1亿条记录,需要再添加50列,但是由于表已经很大很宽,并且源系统无法容纳它,我将接收并加载一个扩展表(比如表“B”)中有50个新列,两个表中都有一个代理键,因此新表也将保存1亿条记录。但是51列。 表B中的代理键是一个标识列,因此它自己生成键。

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

    为了维护表A中的代理密钥,一旦两个表都被加载,我就必须运行一个包含以下代码的过程来更新表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时获得最大性能。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Prayag15    5 年前

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

    总之,

    1. 创建一个与表a具有相同结构的临时表。
    2. 将表A中的数据加载到temp表中,并使用表更新代理键
    3. 截断表A并从临时表加载更新的数据。

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

        2
  •  0
  •   Dan Guzman    5 年前

    This article 能更好的理解你。