MSSQL과 같은 TOP N 쿼리 관련 질문드립니다. 0 2 1,634

by 나는짱이야 [Oracle 기초] [2014.12.10 13:28:24]


안녕하세요. 오라클을 입문한지 얼마되지 않은 초짜 개발자입니다.

MSSQL을 다루는 기본으로 스터디 하고 있는데 제가 이해를 잘못하고 있는 부분인지 확인 하기 위해 질문드립니다.

오라클의 경우 TOP N쿼리를 사용하기 위해 ROWNUM을 사용하는것으로 알고 있습니다.

MSSQL의 경우 SELECT TOP N FROM 테이블 이름 하면 실행계획을 살펴보면 클러스터 인덱스를 타는 것(?)을

확인 할 수 있었습니다.

그런데..오라클의 경우 SELECT ROUNUM,컬럼명1,컬럼명2, FROM 테이블 WHERE ROWNUM<=숫자 이런식으로 쿼리를

수행하면 FULL SCAN을 타는 것을 확인 할 수 있었습니다.

저로써는 해당 테이블에 동일한 컬럼에 PK를 주어져 있는 상황인데...

왜 클러스터 인덱스를 타지 않는건지 궁금합니다.

by 아발란체 [2014.12.10 13:40:33]

MsSQL은 기본 인덱스가 클러스터 형이라 TOP이란 유용한 함수가 존재합니다.

오라클은 인덱스 기본형은 클러스터 형이 아니기 때문에 순서대로 저장되어 있지 않습니다.

즉 최근 데이타 뽑으시려면 날짜시간 값이 저장된 항목이 있어야 하며 해당 항목으로 인덱스를 잡아 빠르게 조회 할 수 있습니다. 아니면 IOT(INDEX ORGANIZED TABLE)라는 테이블이 MsSQL 테이블과 유사한 구조로 저장되어 빠르게 조회 가능합니다. 그러나 IOT 경우 DML이 자주 발생한다면 부하가 보다 발생하는 구조를 가지고 있습니다.

 

참고로 오라클에서 IOT를 쓰지 않고 위 부분을 고려하여 부분 처리를 하는 것은 간단한 문제가 아닙니다.

관련 강좌 : http://www.gurubee.net/lecture/2287

 


by 나는짱이야 [2014.12.10 13:45:39]

와 가려운 부분을 이렇게 시원하게 긁어주시니 감사합니다.^^
 

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