안녕하세요. 3월이 지나가고 있습니다. 비도 추적추적 내리네요.
다들 잘지내시죠?
오늘 있었던 이슈인데요 평상시 제가 SQL을 잘 못하는데... 이해 못하는 부분이 발생되서요.
본문으로 들어가서 쿼리는 아래와 같습니다. 추후는 생략했어요.
SELECT /*+ INDEX_DESC(A SYS_C00207718) */ ROWNUM RN, A.SEQ, A.TITLE, A.HIT, A.INSERTED_BY, A.INSERTED_DATE, B.NAME FROM BOARD A, CUSTOMER B WHERE A.INSERTED_BY = B.LOGIN_ID SYS_C00207718는 BO_BOARD (SEQ)의 유니크 인덱스 이자 pk입니다.
B와 조인하지 않을 경우 SEQ별로 제대로 INDEX DESC가 수행됩니다.
그런데 조인할 경우 SEQ가 뒤죽박죽이 되어버리더라구요. 재현 해보려고 하니 제가 테스트하며 결합인덱스로 그냥 묶어버리고 where 조건을 결합인덱스에 해당하는 조건으로 주니 해결되버려서 플랜을 재현할 수가 없는데요..
위와 같이 구현할 경우 문제가 발생하기도 하나요? (혹시 ROWNUM과 JOIN의 순서로 인한 문제인가요?)
처음엔 ROWNUM 관련 에러인지 알았는데 조인만 제거하면 정상으로 답이 나와서요.
이 부분에 대해서 궁금합니다. 혹시 페이징 처리할 때 어떻게 구현하시나요?
--
참고로 플랜은 CUSTOMER FULL SCAN 후 INDEX(UNIQUE) 그리고 네스티드 루프 ROW ID 네스티드 루프 순으로 풀렸습니다.