Как массово обновить таблицы с большими данными - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно обновить столбец в одной таблице с содержимым из столбца в другой таблице в Oracle. Поскольку в каждой из этих таблиц содержится около 4 миллионов записей, я столкнулся с трудностями при обновлении.

Таблица A Структура (промежуточный стол)

Col1    Col2    Col3    Col4
L1      P1      PC1     D1
L2      P2      PC2     D1
L3      P3      PC3     D2
L4      P3      PC3     D3

Таблица B Структура

Col1    Col2    Col3
E1      P1      F1
E2      P1      F2
E3      P2      F3
E4      P3      F4
E5      P4      F5

Мне нужно обновить Col3 в таблице B со значением из Col4 из таблицы A , когда есть совпадение для Col2 в таблица A и B .

Я попытался с помощью команды слияния, но поскольку в этих 2 таблицах миллионы записей, у нас возникают проблемы с пространством для временной таблицы.

Команда слияния, которую я использовал, была

merge into b
using
(select col2,col4 from a) c
on c.col2=b.col2
when matched then update set b.col3=c.col4;

Есть ли лучший подход для обработки этого массового обновления?

1 Ответ

0 голосов
/ 04 июля 2018

Для 4 миллионов строк я бы проверил, возможно ли короткое время простоя, и попробую

RENAME b TO b_old;

CREATE TABLE b AS 
SELECT col1, col2, coalesce(a.col4, b_old.col3) as col3
  FROM b_old 
  LEFT JOIN a ON a.col2 = b_old.col2;

Recreate indexes, constraints, comments etc on b

DROP TABLE b_old;

Если это все еще слишком медленно, я бы посмотрел на разбиение обеих таблиц и запустил воссоздание как параллельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...