본문 바로가기
공부/DB

[SQL] ROWNUM 적용한 페이징 쿼리

by 미네밍 2021. 2. 20.
SELECT A.*
  FROM (SELET ROWNUM AS RNUM
            , EMPL.PERS_NO
            , INFO.KOR_NM
            , EMPL.STAFF_FG
        FROM (
              SELECT PERS_NO
                         , STAFF_FG  
                FROM EMPL
               WHERE ROWNUM <= '500'
            ) EMPL
          , INFO 
      WHERE EMPL.PERS_NO = INFO.PERS_NO(+)
     ) A
 WHERE 1=1     
   AND RNUM >= '1'

사실, 대용량이라고 하기도 애매한 건수이지만, 어쨌든 성능이 안나오는 쿼리에 페이징을 적용해야 할 일이 생겼다.
대충 위와 같은 방식으로 쿼리를 짜 페이징 적용을 했다.
ROWNUM 을 사용한 것 외에도, 안쪽 테이블에 직접 INFO 테이블을 LEFT 조인을 걸고 있었는데
이를 바깥으로 빼 페이징이 적용된 데이터들만 가지고 조인을 하도록 했다.

페이징 쿼리를 짜는 방법에 따라 속도가 조금씩 차이가 나는 것 같다.
기존 쿼리에는 안쪽 EMPL 테이블 안에 스칼라쿼리들이 굉장히 많았었는데,
페이징을 적용한 500건의 데이터만을 가지고 스칼라쿼리를 수행할 수 있도록 바깥으로 빼주었다.

방법마다 차이가 나는 이유에 대해 주말에 공부해 내용을 채워넣어야겠다.

'공부 > DB' 카테고리의 다른 글

쿼리(LEAD)  (0) 2021.02.18
[SQL] ROWNUM = 2  (2) 2021.01.15
[SQL] Order by 문 변형  (0) 2021.01.15
[중첩루프조인] 오라클 조인 Nested Loop Join  (0) 2019.12.02
오라클 튜닝  (0) 2019.09.22

댓글