что satement выполняется быстро в оракуле, Удалить + вставить ИЛИ вставить, где идентификатор не в списке.? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть процедура с двумя таблицами ABC и EXT_ABC.В таблицу EXT_ABC загружаются ежедневные данные (EXT_ABC усекается в конце каждого дня), а в ABC загружаются ежедневные данные из EXT_ABC для ведения истории. Теперь когда-нибудь EXT_ABC приносит обновленные данные для идентификатора, уже существующего в таблице ABC, поэтому мы используем следующую логику.

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 );

Обе таблицы имеют столбец Индекс по идентификатору.

1 Ответ

0 голосов
/ 19 декабря 2018

Похоже, здесь может быть полезно выражение 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>);
...