【发布时间】:2011-05-19 03:54:13
【问题描述】:
我有一个从 5 个大表中获取数据的查询,请您帮我调整一下这个查询的性能:
SELECT DECODE(SIGN((t1.amount - NVL(t2.amount, 0)) - 4.999), 1, NVL(t2.amount, 0), t1.amount) AS amount_1,
t1.element_id,
t1.start_date ,
t1.amount,
NVL(t5.abrev, NULL) AS criteria,
t1.case_id ,
NVL(t5.value, NULL) segment,
add_months(t1.start_date, -1) invoice_date,
NVL((SELECT SUM(b.amount)
FROM TABLE1 a, TABLE3 b
WHERE a.element_id = b.element_id
AND b.date_invoicing < a.start_date
AND t1.element_id = a.element_id),
0) amount_2
FROM TABLE1 t1, TABLE2 t2, TABLE3 t3, TABLE4 t4, TABLE5 t5
WHERE t1.TYPE = 'INVOICE'
AND t2.case_id = t3.case_id
AND t2.invoicing_id = t3.invoicing_id
AND t2.date_unpaid IS NULL
AND t1.element_id = t3.element_id(+)
AND add_months(t1.start_date, -1) <
NVL(t4.DT_FIN_DT(+), SYSDATE)
AND add_months(t1.start_date, -1) >= t4.date_creation(+)
AND t1.case_id = t4.case_id(+)
AND t4.segment = t5.abrev(+)
AND t5.Type(+) = 'CRITERIA_TYPE';
有什么问题可以换成别的吗?
感谢您的帮助
【问题讨论】:
-
就目前而言,您尝试使用 (+) 到 t3 的外部连接,但被其他不使用 (+) 的谓词强制返回到内部连接,例如“t2.case_id = t3 。案例ID”。如果您可以使用 ANSI 连接来编写它,那么它会更不容易出错并且更易于阅读。不过,这与性能无关。
标签: sql oracle performance