У меня есть запрос, который принимать данные от 5 огромного стола, не могли бы вы мне помочь с настройкой производительности этого запроса:Помощи для настройки SQL - ORACLE
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.case_id». Если вы могли бы написать это с помощью ANSI-соединений, это было бы менее подверженным ошибкам и более простым для чтения. Тем не менее это не имеет никакого отношения к производительности. – 2010-12-02 14:16:25