-1

在处理 DB2 时,我有 2 个表:

表_A >

2 列:CLAIM_ID、CODEID_A

表_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

我的问题是,如果我们在这里使用 Ingest 而不是 Update,那会更快吗?

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


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

4

1 回答 1

1

您还可以考虑使用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 

PS。未经测试,直接在这里输入..但你明白了......

于 2021-01-04T21:51:19.330 回答