안녕하세요. 2시간 정도 고민해도 떠오르질 않아 문의드리게 되었습니다.
NL JOIN에서 후행테이블의 컬럼 ORDER BY가 있으면 SORT 생략이 불가능할까요?
제 생각에는 SORT가 생략될 법 한데 생략되지 않습니다
CREATE TABLE ORA_SQL_TEST.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 OT(C1, C2)
-- SORT ORDER BY 생략 가능
SELECT /*+ ORDERED USE_NL(INN) INDEX(OT) INDEX(INN) */ OT.COL1,OT.COL2,INN.C1
FROM OT, INN
WHERE OT.COL1 = 3
AND OT.COL2 > 5
AND OT.COL2 = INN.C1
ORDER BY OT.COL1,OT.COL2;
-- SORT ORDER BY 생략 불가
SELECT /*+ ORDERED USE_NL(INN) INDEX(OT) INDEX(INN) */ OT.COL1,OT.COL2,INN.C1
FROM OT, INN
WHERE OT.COL1 = 3
AND OT.COL2 > 5
AND OT.COL2 = INN.C1
ORDER BY OT.COL1,OT.COL2,INN.C1;
전통적인 NL 조인에서는 인덱스 정렬이 유지되지만.
NL 조인 기능이 향상되면서 배치 I/O 가 동작하면 정렬결과가 보장되지 않습니다.
해당 기능이 동작하지 않도록 힌트를 추가해 보세요.
no_nlj_batching
no_batch_table_acces_by_rowid