Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Обновление строк в таблице  [new]
mihaaa19
Member

Откуда:
Сообщений: 9
Здравствуйте!
Столкнулся с задачей обновить строки в таблице1 данными из таблицы2 (обновить только те, значения в которых null ) , а так же поставить флаг, если запись была найдена и добавлена.

update table1 k set k.atr1 = (select r.atr2 from
table2 r where
k.number=r.num and r.atr2 is not null
), k.source_r='1'
where k.atr1 is null;


Проверил логику работы, с ней все вроде бы в порядке.
Данный скрипт проверил на 10 строках таблицы1, работал около 2 минут. Для целой таблицы, в которой содержится около 80 тыс нулевых строк (подходящих нам), данный скрипт не работает.
Подскажите, пожалуйста, как можно модифицировать запрос, чтобы заработало.
14 окт 19, 11:59    [21993558]     Ответить | Цитировать Сообщить модератору
 Re: Обновление строк в таблице  [new]
AmKad
Member

Откуда:
Сообщений: 5111
mihaaa19
данный скрипт не работает.
По каким симптомам был поставлен диагноз?
14 окт 19, 12:05    [21993563]     Ответить | Цитировать Сообщить модератору
 Re: Обновление строк в таблице  [new]
mihaaa19
Member

Откуда:
Сообщений: 9
AmKad,

запускал на ночь, утром останавливал, проверял сколько флагов выставлено (ни одного).
Сам факт, что скрипт работал всю ночь, мне кажется, не очень эффективно
14 окт 19, 12:09    [21993572]     Ответить | Цитировать Сообщить модератору
 Re: Обновление строк в таблице  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5963
mihaaa19,

Простая арифметика: 10 строк - 2 минуты, 80К строк - ?

Получаем ожидаемое время 16000 минут, ты просто немножко не дождался!

0. Перепиши на merge, чтобы уйти от многопроходности по table2, которая либо много больше 80К строк, либо каждый раз читается полностью
1. Коммит не забудь
2. Можно разбить на куски
3. Конкурентной вставки и обновлений нет?
14 окт 19, 12:19    [21993580]     Ответить | Цитировать Сообщить модератору
 Re: Обновление строк в таблице  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48614

mihaaa19
Проверил логику работы, с ней все вроде бы в порядке.

Нет. Если у update в части set видишь подзапрос - у его автора не в порядке ни с головой
вообще, ни с логикой в частности. MERGE тебе нужен.

Posted via ActualForum NNTP Server 1.5

14 окт 19, 12:32    [21993597]     Ответить | Цитировать Сообщить модератору
 Re: Обновление строк в таблице  [new]
mihaaa19
Member

Откуда:
Сообщений: 9
Dimitry Sibiryakov,
env,
Спасибо, разобрался!
15 окт 19, 09:08    [21994273]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить