首页 > 解决方案 > 在 oracle 中快速执行什么语句,删除+插入或插入 ID 不在列表中。?

问题描述

我有一个包含两个表 ABC 和 EXT_ABC 的过程。EXT_ABC 表加载了每日数据(EXT_ABC 在每天结束时被截断),ABC 加载了来自 EXT_ABC 的每日数据以维护历史。现在有时 EXT_ABC 会为 ABC 表中已经存在的 ID 带来更新数据,因此我们使用以下逻辑。

DELETE FROM ABC WHERE ID IN ( SELECT ID FROM EXT_ABC);
commit;
INSERT INTO ABC
select * from EXT_ABC;

是上述逻辑快速还是我可以执行以下操作来优化流程。

INSERT INTO ABC
select * from EXT_ABC where ID not in (SELECT ID FROM ABC );

两个表在 ID 列上都有索引。

标签: sqloptimizationoracle11gsql-deleteprocedure

解决方案


听起来像 Merge 语句可以在这里使用,例如:

merge into abc tgt
  using ext_abc src
  on (tgt.id = src.id)
when not matched then
  insert (<list of target table columns>)
  values (<list of source table columns>);

推荐阅读