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 |
댓글