INDEX 생성 문제.. 0 2 5,400

by 손님 [Oracle Tuning] index 인덱스 대용량 페이징 [2009.11.23 10:12:55]


안녕하세요... 눈팅만 하다가 도움이나 조언을 얻고자 이렇게 글을 올려봅니다..

오라클에 대한 많은 경험이 있는것도 아니고 INDEX 에 대한 개념이 잡혀있지도 않은 상태인것 같습니다.

테이블이 두개 존재 합니다.

A 테이블에는 IDX 값을 PK 로 가지고 있는 120 만건의 테이블이 있습니다.

B 테이블에는 A.PK 를 FK 로 잡고 있는 2억건의 데이타를 가지고 있습니다.

여기서 제가 보여주고 싶은 부분은 B 테이블에서 FK 가 같은 묶음을 보여주고 싶은 부분인데요..

B 테이블에 날짜 필드가 있는데 (insert 시 순차가 아닌 중구난방으로 들어옵니다) 날짜 순으로 보여주고 싶습니다.

대용량 페이징 쿼리시 INDEX 를 제대로 걸면 ORDER BY 없이 ROWNUM 으로 보여줄수 있는 부분을 찾아서

적용시켜 보려고 하였는데.. (FK 에만 INDEX 생성후 SELECT 한후에 ORDER BY 를 하면 시간이 오래 걸리더군요)

제 생각에는 FK 와 날짜 테이블에 INDEX 를 걸면 제가 생각한대로 나올줄 알았는데 그건 아니더군요..

CREATE INDEX INDEX_NAME ON B 테이블 (B.FK, 날짜 DESC)

이런식으로 만든후에

SELECT * FROM B테이블 WHERE B.FK = 1111 AND  ROWNUM <= 10;

이라고 하면 결과는 빨리 나오는데 날짜순으로 정렬이 되진 않더군요..

이런 경우에는 어떤식으로 인덱스를 줘야 할지 조언좀 부탁드리겠습니다...

오라클 버전은 10g 입니다.

by 마농 [2009.11.23 13:07:27]
SELECT /*+ INDEX(b 인덱스명) */ *
FROM b테이블 b
WHERE b.fk = 1111
AND b.날짜 IS NOT NULL
AND ROWNUM <= 10
;

by 손님 [2009.11.24 11:28:55]
마농님 소중한 시간 내어 답변해주셔서 감사드립니다.
날짜 필드에 NULL 값이 있어서 BITMAP INDEX 로 생성 했더니 DESC 정렬이 안되는가 싶어서 결과가 잘못 나왔던거 같습니다. BITMAP이 아닌 인덱스로 생성한후에 답변주신대로 힌트를 주니 정상적인 결과가 나왔습니다. (B.FK, 날짜 DESC)
덕분에 해결했습니;다. 감사드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입