Oracle обновить SQL-запрос - PullRequest
       7

Oracle обновить SQL-запрос

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

Мой запрос такой.Это не показывает ошибку.Но имея долгое время исполнения, я вынужден закрыться.Пожалуйста, проверьте

update trans_rec a
set a.qty = (select b.qtydes from itbg_store_delchellan b where b.icode = 
a.icode and a.controlno=b.DEL_NO AND A.controlno IS NOT NULL) 
where exists 
    (select b.qtydes from itbg_store_delchellan b where b.icode = a.icode and 
    a.controlno=b.DEL_NO  AND A.controlno IS NOT NULL )

Ответы [ 4 ]

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

Чтобы повысить производительность, создайте составной индекс для itbg_store_delchellan:

create index idx_itbg_store_delchellan_3 on itbg_store_delchellan(icode, del_no, qtydes)

Обратите внимание, что условие A.controlno IS NOT NULL является избыточным.Условие корреляции уже отфильтрует NULL значений, поэтому вы можете удалить его из обоих подзапросов.

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

Вы можете переписать свой запрос следующим образом:

UPDATE trans_rec a
SET a.qty =
    (SELECT b.qtydes 
    FROM itbg_store_delchellan b
    WHERE b.icode = a.icode and a.controlno=b.DEL_NO) 
WHERE a.controlno IS NOT NULL
AND EXISTS
(SELECT b.qtydes FROM itbg_store_delchellan b
WHERE b.icode = a.icode AND a.controlno=b.DEL_NO)

После этого вы должны добавить индексы в поиск по полю, как показано ниже:

добавить следующий фильтр в эти поля

  • b.icode
  • a.controlno
  • a.icode
0 голосов
/ 03 декабря 2018

Вы можете использовать оператор MERGE в Oracle.

MERGE INTO trans_rec t USING 
( select DISTINCT icode,del_no,qtydes
       FROM itbg_store_delchellan s 
)
ON (
     s.icode = t.icode AND t.controlno = s.del_no
)
WHEN MATCHED THEN UPDATE SET t.qty = s.qtydes
WHERE t.controlno IS NOT NULL
0 голосов
/ 03 декабря 2018

Попробуйте это обновление:

UPDATE A
SET     qty = B.qtydes 
from    trans_rec AS A
INNER JOIN itbg_store_delchellan B
             ON B.icode = A.icode 
             AND A.controlno=b.DEL_NO 
             AND A.controlno IS NOT NULL        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...