SELECT A.*,B.FILE_ID,B.NO,B.DWG_NO FROM MAST T1,TFILE T2
WHERE T1.NO = 'S1089'
AND T1.YN = 'N'
AND T1.CD = 'A4'
AND T1.W_NO = T2.W_NO
AND T2.STM_DCMTM_ID >' ' --is not null
AND NOT EXISTS (SELECT 'X'
FROM RAP_FILE
WHERE CD = 'L'
AND FILE_ID = T2.FILE_ID);
위와 같은 SQL이 있습니다.(T1 300만건, T2 400만건, RAP_FILE은 40만건입니다.)
T1 조건절을 주면 20만건, T2와 조인해도 같은 20만 건수 입니다.
AND NOT EXISTS를 하지 않으면 20만건이 나오고
AND NOT EXISTS를 하면 0건이 나옵니다.
이거 어떻게 하면 성능이 조금이라도 좋아 질까요? ^^;
140초가 걸리네요.
엑셀파일이 보안에 걸려서 붙여넣기가 안되네요. ^^
ID PID Operation Name Rows Bytes Cost CPU Cost IO Cost
0 SELECT STATEMENT 1 102 11526 111M 11520
1 0 SORT AGGREGATE 1 102
2 1 NESTED LOOPS ANTI 55416 5519K 11526 111M 11520
3 2 NESTED LOOPS 55534 4609K 11524 96M 11519
4 3 TABLE ACCESS BY INDEX ROWID MAST 7447 189K 348 4426668 348
5 4 INDEX RANGE SCAN MAST_IE1 7877 9 454432 9
6 3 TABLE ACCESS BY INDEX ROWID TFILE 7 413 2 12421 2
7 6 INDEX RANGE SCAN TFILE_IX3 8 1 2180 1
8 2 INDEX UNIQUE SCAN RAP_FILE_PK 529 8993 1 263 1 |