DB2 - 摄取与更新

问题描述

在使用 DB2 时,我有 2 个表:

TABLE_A >

2 列:CLaim_ID、CODEID_A

TABLE_B >

2 列:CLaim_ID、CODEID_B

目标是编写一条 DB2 Update 语句,检查 TABLE_A 的 CLaim_ID 是否与 TABLE_B 的 CLaim_ID 相同,然后将 CODEID_A(TABLE_A 的 CLaim_ID 的)替换为 CODEID_B(TABLE_B 的 CLaim_ID 的)。

TABLE_A 和 TABLE_B 都有大约 4 亿行。 VSch 是架构名称

发现相关子查询应该可以工作:

UPDATE MY_SCHEMA.TABLE_A apc SET CODEID_A = (SELECT TABLE_B.CODEID_B FROM SCHEMA_2.TABLE_B TABLE_B 
  WHERE TABLE_B.CLaim_ID = apc.CLaim_ID)
  WHERE EXISTS (SELECT 1 FROM SCHEMA_2.TABLE_B TABLE_B WHERE (TABLE_B.CLaim_ID = apc.CLaim_ID));

这是两个表中的列结构和索引的详细信息 - TableA 和 TableB: https://codeshare.io/armxAv

我的问题是,如果我们在这里使用摄取而不是更新,会更快吗?

如果我们通过 DB2 Ingest 路由,我们可以首先 DB2 将要更新的值列表从 TABLE_B 提取一个 FLAT 文件中,然后从该 FLAT 文件中执行一个 DB2 INGEST 到 TABLE_A 中。


就时间复杂度而言,这是一种有效的方法吗?如果是,有人可以帮助我进行相同的摄取查询吗?

解决方法

您也可以考虑使用 MERGE 语句

MERGE INTO tablea a 
   USING (SELECT claimsid_b,codeid_b FROM tableb) b 
   ON (a.claimsid_a = b.claimsid_b) 
   WHEN MATCHED THEN  
     UPDATE SET 
        a.codeid_a = b.codeid_b 

附注。未经测试,直接在此处输入..但您明白了...