SORT가 생략되지 않습니다 0 1 1,912

by 양양 [Oracle Tuning] [2022.12.31 13:17:14]


안녕하세요. 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;

by 마농 [2023.01.02 09:12:37]

전통적인 NL 조인에서는 인덱스 정렬이 유지되지만.
NL 조인 기능이 향상되면서 배치 I/O 가 동작하면 정렬결과가 보장되지 않습니다.
해당 기능이 동작하지 않도록 힌트를 추가해 보세요.
no_nlj_batching
no_batch_table_acces_by_rowid

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