Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Optimising the Query
Greetings,
No of records in TABLE1 = 46697622 No of records in TABLE2 = 9433275 No of records in TABLE3 = 9576297 SELECT TAB1.P_TDATE, FLOOR(TAB1.STIME/100) T_TIME, SUM (CASE WHEN TAB1.LIND <> 1 AND (TAB2.CNAME NOT IN ('PN','AR') OR (NVL(TAB3.OMNI,0) <> 7) OR (TAB1.TIF <> 3)) THEN 1 ELSE 0 END ) ORDPOSTMKT, SUM (CASE WHEN (TAB2.CNAME IN ('PN','AR') OR (TAB3.OMNI = 7) OR (TAB1.TIF = 3)) THEN 1 ELSE 0 END ) ORDOARS FROM TABLE1 TAB1 LEFT OUTER JOIN ( ( SELECT ID, P_TDATE, SYMBOL, REFNUMBER, CNAME, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY REFNUMBER) RANK FROM TABLE2 ) TAB2 JOIN (SELECT ID, P_TDATE, SYMBOL, OMNI, REFNUMBER, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY REFNUMBER) RANK FROM TABLE3 ) TAB3 ON ( TAB2.P_TDATE = TAB3.P_TDATE AND TAB2.SYMBOL = TAB3.SYMBOL AND TAB2.ID = TAB3.ID AND TAB2.REFNUMBER = TAB3.REFNUMBER AND TAB3.RANK = 1 AND TAB2.RANK = 1) ) ON (TAB1.P_TDATE = TAB3.P_TDATE AND TAB1.SYMBOL = TAB3.SYMBOL AND TAB1.ID = TAB3.ID) WHERE TAB1.OIND <> 0 AND TAB1.OTYPE IN ('MR','GMR') GROUP BY TAB1.P_TDATE, FLOOR(TAB1.STIME/100) ORDER BY T_TIME
Currently the query is taking 2+ hrs to execute.
The query is taking records from TABLE2 and TABLE3 and LEFT OUTER JOIN
with TABLE1.
I know I am not giving much details abt each step and conditions used
here but the query is
running fine and just wanted to know whether the same query can be
written
in a more efficient manner.
Any help would be appreciated.
TIA DB version Info:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi PL/SQL Release 10.2.0.1.0 - Production Received on Sun Nov 05 2006 - 11:31:06 CST
![]() |
![]() |