NL JOIN에서 INNER TABLE 순서 관련 0 0 2,189

by 양양 [Oracle Tuning] [2022.12.27 23:18:30]


CREATE TABLE OT(COL1 NUMBER, COL2 NUMBER, COL3 NUMBER,COL4 NUMBER);
CREATE INDEX IDX_OT ON OT(COL1,COL2);

CREATE TABLE INN(C1 NUMBER, C2 NUMBER, C3 NUMBER, C4 NUMBER);
CREATE INDEX IDX_INN ON inN(C1,C2);

SELECT /*+ ORDERED USE_NL(INN) NDEX(OT) INDEX(INN) */ *
FROM OT,  INN
WHERE OT.COL1  >= 3
AND INN.C1 = OT.COL2
AND INN.C2 >= 5
ORDER BY OT.COL1,OT.COL2,INN.C1,INN.C2;

-- OT.COL1,OT,COL2,INN.C1 은 정렬 생략 가능

------------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name    | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |         |      1 |        |   2945 |00:00:00.01 |     733 |
|   1 |  SORT ORDER BY                         |         |      1 |      1 |   2945 |00:00:00.01 |     733 |
|   2 |   NESTED LOOPS                         |         |      1 |      1 |   2945 |00:00:00.01 |     733 |
|   3 |    NESTED LOOPS                        |         |      1 |      1 |   2945 |00:00:00.01 |      63 |
|   4 |     TABLE ACCESS BY INDEX ROWID BATCHED| OT      |      1 |      1 |     82 |00:00:00.01 |       2 |
|*  5 |      INDEX RANGE SCAN                  | IDX_OT  |      1 |      1 |     82 |00:00:00.01 |       1 |
|*  6 |     INDEX RANGE SCAN                   | IDX_INN |     82 |      1 |   2945 |00:00:00.01 |      61 |
|   7 |    TABLE ACCESS BY INDEX ROWID         | INN     |   2945 |      1 |   2945 |00:00:00.01 |     670 |
------------------------------------------------------------------------------------------------------------
 

 

@문의

후행 테이블인 INN 테이블의 데이터가 전부 메모리에 있다면

1. SORT ORDER BY PLAN 생략

2. SORT ORDER BY PLAN은 표기되지만 BUFFERS 수치 증가 없음

 

개인적인 테스트에서는 <2> 결과로 나오는 것 같은데... 제가 이해하고 있는 것이 맞을지 조언 부탁드립니다

 


 

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입