我正在尝试优化以下查询:
/bin/pip
问题似乎与table2上的嵌套循环有关
一种可能性是为所有联合创建一个内联视图,然后将视图加入table2,这样它就不会反复执行联合。
我该如何创建这样的内联视图?
感谢您提供任何信息。
答案 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))