2016-11-09 2 views
1

У меня есть таблица с 58 миллионами записей с 30 столбцами, в которых я хочу обновить один столбец, сопоставляя другую таблицу с 45 миллионами записей с двумя столбцами.Обновить запрос для одного столбца между двумя огромными таблицами

MERGE INTO /*+ PARALLEL(tbl_temp) */ tbl_temp tcm 
USING (SELECT frn.id, frn.risk FROM temp_new frn) a 
ON (a.id = tcm.fi_id) WHEN MATCHED THEN UPDATE 
SET tcm.risk_label=a.risk; 

это запрос, который я пробовал, но он занимает более 12 часов. Я попытался с пакетным мудрым обновлением также с размером партии 10000, но с той же проблемой. Есть ли другой способ повысить производительность запроса?

+1

Подсказки идут после первого ключевого слова ('merge',' insert', 'select' и т. Д.). –

+1

Обычно, когда вы делаете 'MERGE', но только с предложением' WHEN MATCHED THEN UPDATE', тогда достаточно простого 'UPDATE'. У вас есть индексы на 'ID' и' FI_ID'? Разделена ли таблица 'TBL_TEMP'? Если нет, то подсказка PARALLEL не имеет большого смысла. –

+0

@WernfriedDomscheit, Да, у нас есть индексы по указанным столбцам, а таблица не разделена. – TSKSwamy

ответ

2

Если у вас достаточно свободного места, заново создайте свою таблицу - создайте новую таблицу с именем temp и той же структурой, используйте insert в качестве выбора из текущей таблицы слева, присоединенной к таблице отображения, используя параллельный и добавочный намек. Переименуйте текущую таблицу, переименуйте новую таблицу в текущее имя. Переместите все индексы/синонимы, гранты/триггеры и т. Д. Из старой таблицы в новую. Проверьте свое приложение. Если это нормально, вы можете отказаться от старого.

+0

Может быть пустым и пополнить старую таблицу, когда новая таблица будет по необходимости, при этом необходимо сохранить DDL для объектов периферии. –

+0

Если миграция занимает часы I сомневайтесь, что это хорошая идея. Легче повторно использовать ddls. Есть и другой способ: создать новую таблицу как разделенную на 1 раздел (например, систему), а затем использовать раздел обмена, чтобы переместить данные обратно в старую таблицу. – Rusty

Смежные вопросы