Hi All,
I'm currently doing a project which basically compares two tables and tries to match them. Basically most queries are full outer joins of two tables, like the following:
**************************
**********
**********
********
INSERT INTO DC_TEMP_PORTF_SEC_PERFORMA
NCE (PERF_D, CLIENT_C, SEC_N, GS_SEC_ID, PROG_C, CTRY_N, SEC_CURR_N, ASSET_N, PMS_EMV_SGD, PMS_EMV_USD, PMS_EMV_LCL, EVE_EMV_SGD, EVE_EMV_USD, EVE_EMV_LCL)
(
-- Full outer join
SELECT D.PERF_D, D.CLIENT_C, D.SEC_N, D.PROG_C, D.CTRY_N, D.SEC_CURR_N, D.ASSET_N, D.EMV_SGD AS PMS_EMV_SGD, D.EMV_USD AS PMS_EMV_USD, D.EMV_LCL AS PMS_EMV_LCL, E.EMV_SGD AS EVE_EMV_SGD, E.EMV_USD AS EVE_EMV_USD, E.EMV_LCL AS EVE_EMV_LCL
FROM DC_SEC_PERFORMANCE D, DC_EVE_FX_TXN E
WHERE D.PERF_D >= '11-DEC-2004' AND D.ASSET_N = '029' AND D.PERF_D = E.VAL_DATE (+) AND D.CLIENT_C = E.CLIENT_C (+) AND D.SEC_CURR_N = E.CURR1 (+)
UNION ALL
SELECT E.VAL_DATE AS PERF_D, E.CLIENT_C AS CLIENT_C, D.SEC_N, D.PROG_C, D.CTRY_N, E.CURR1, D.ASSET_N, D.EMV_SGD AS PMS_EMV_SGD, D.EMV_USD AS PMS_EMV_USD, D.EMV_LCL AS PMS_EMV_LCL, E.EMV_SGD AS EVE_EMV_SGD, E.EMV_USD AS EVE_EMV_USD, E.EMV_LCL AS EVE_EMV_LCL
FROM DC_SEC_PERFORMANCE D, DC_EVE_FX_TXN E
WHERE D.PERF_D (+) >= '11-DEC-2004' AND D.ASSET_N (+) = '029' AND D.PERF_D (+) = E.VAL_DATE AND D.CLIENT_C (+) = E.CLIENT_C AND D.SEC_CURR_N (+) = E.CURR1 AND D.Perf_D IS NULL
)
**************************
**********
********
However, as all the tables are huge, this (four full table scans) takes a lot of time. What would be the possible ways to optimise it? Thanks.
Btw: I'm using Oracle 8i, which doesn't have OUTER JOIN statements, that's why the UNION.
Start Free Trial