Оптимизация запросов для обновления миллионов данных в Oracle?

Мы используем утилиту BOMStripperInputStream.java , чтобы удалить спецификацию с нашего ввода, если она есть.

2
задан Hary Kamaro 16 January 2019 в 08:28
поделиться

1 ответ

Вы должны взглянуть на функцию Updatable Join View в Oracle - это именно ваш вариант использования.

Сначала объедините все таблицы в подзапросе (это будет эффективно выполнено с помощью хеш-объединения без медленных последовательных циклов строк).

Чем UPDATE подзапрос

Пример

create table a
(col1 number,
col2 number);

create table b
(col2 number,
col3 number);

create table c
(col3 number,
col4 number);

insert into a values(null,1);
insert into b values(1,2);
insert into c values(2,1);


update (
select a.col1, c.col4
from a 
join b on a.col2 = b.col2
join c on b.col3 = c.col3
)
set col1 = col4
;

Обратите внимание, что UJV имеет некоторые предварительные условия. В случае пропуска это приводит к

ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа

В вашем случае вы должны вернуть таблицу [ 113] и C с уникальным индексом, чтобы гарантировать представление с сохранением ключа

create unique index c_idx on c(col3);
create unique index b_idx on b(col2);

Если это невозможно сделать на рабочих таблицах, просто используйте временную таблицу и создайте Благодаря уникальному индексу обновленное представление будет проще объединять только две таблицы.

0
ответ дан Marmite Bomber 16 January 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: