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> 결과로 나오는 것 같은데... 제가 이해하고 있는 것이 맞을지 조언 부탁드립니다