创建oracle内联视图

时间:2015-12-02 20:17:24

标签: sql oracle performance query-optimization

我正在尝试优化以下查询:

/bin/pip

问题似乎与table2上的嵌套循环有关 一种可能性是为所有联合创建一个内联视图,然后将视图加入table2,这样它就不会反复执行联合。
我该如何创建这样的内联视图? 感谢您提供任何信息。

1 个答案:

答案 0 :(得分:0)

你可以尝试使用EXISTS而不是IN来解决嵌套循环问题:

WITH t as (
SELECT d.accounting_event_id
  FROM table3 d
 WHERE d.invoice_id = 1234
UNION ALL
SELECT aida.bc_event_id
  FROM table3 aida
 WHERE ida.invoice_id = 1234
UNION ALL
SELECT d.accounting_event_id
  FROM table4 d
 WHERE d.invoice_id = 1234
UNION ALL
SELECT d.accounting_event_id
  FROM table5 d
 WHERE d.check_id IN (SELECT a.check_id FROM table4 a WHERE a.invoice_id = 1234)
UNION ALL
SELECT d.accounting_event_id
  FROM table6 d
 WHERE d.invoice_id = 1234)
-- 
SELECT *
  FROM table1 t1
 WHERE EXISTS (SELECT 1
                 FROM table2 b
                WHERE t1.header_id = b.header_id
                  AND EXISTS (SELECT 1
                                FROM t
                               WHERE t.accounting_event_id = b.event_id))