Как повысить производительность SQL-запроса? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть Sql Queries, в которых он влияет на производительность пакета. ln_trans_type_id - объявленная переменная.

UPDATE invoice_table xai 
  SET process_flag = 'E', 
      error_description = 'Invoice Number Does not Exists ' 
WHERE xai.process_flag = 'N' 
AND NOT EXISTS (  
    SELECT 1 
    FROM ra_customer_trx_all rct 
    WHERE rct.org_id = 1001 
    AND rct.trx_number = xai.invoice_number 
    AND rct.cust_trx_type_id = ln_trans_type_id
);

пожалуйста, просмотрите и посоветуйте.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Без плана выполнения мы можем только догадываться. Вы должны сравнить производительность с NOT IN, но убедитесь, что подзапрос не возвращает никаких значений NULL, иначе вы не получите никаких попаданий.

UPDATE invoice_table xai 
  SET process_flag = 'E', 
      error_description = 'Invoice Number Does not Exists ' 
WHERE xai.process_flag = 'N' 
AND  xai.invoice_number 
           NOT IN (  
    SELECT rct.trx_number 
    FROM ra_customer_trx_all rct 
    WHERE rct.org_id = 2326 
    AND  rct.trx_number is not null -- important!
    AND rct.cust_trx_type_id = ln_trans_type_id
);
0 голосов
/ 09 ноября 2018

Если вы внутри пакета объявляете переменную (как tempVar) и переходите позже к обновлению

 SELECT 1 into tempVar FROM 
 ra_customer_trx_all rct , invoice_table xai  
 WHERE rct.org_id = 1001 AND rct.trx_number = xai.invoice_number AND rct.cust_trx_type_id = ln_trans_type_id
...