티스토리 뷰
728x90
반응형
Offset-based Pagination
Oracle은 ROWNUM을 사용하여 페이지 처리
MySQL은 LIMIT를 사용하여 페이지 처리
ROWNUM, BETWEEN 사용 (1.3초)
- 정렬은 인라인 뷰에서 먼저 처리
- BETWEEN을 사용하면 전체 데이터에 ROWNUM을 처리해서 성능 이슈
select A.*, ROWNUM as RN
from (
select *
from TABLE
order by 1
) A
where ROWNUM BETWEEN 11 AND 20;
ROWNUM, 페이지 수를 계산해서 사용 (1.3초)
select *
from (
select A.*, CEIL(ROWNUM/10) as PAGE
from (
select *
from TABLE
order by 1
) A
)
where PAGE = 2;
ROW_NUMBER() 사용 (1.1초)
- ROW_NUMBER()는 동일한 값이 존재해도 반드시 순위가 갈린다는 점
- RANK()는 동일한 값이 있을 경우 같은 값 출력
select *
from (
select A.*, ROW_NUMBER() OVER(ORDER BY ID DESC) as RN
from TABLE A
)
where RN BETWEEN 11 AND 20;
ROWNUM 나눠서 사용 (0.8초)
- ROWNUM 20번까지 붙이고 11번부터 조회
select *
from (
select A.*, ROWNUM as RN
from (
select *
from TABLE
order by 1
) A
where ROWNUM <= 20
)
where RN >= 11;
ROWNUM, Index Hint 사용 (0.6초)
select *
from (
select /*+index_desc(A 인덱스명)*/ A.*, ROWNUM as RN
from (
select *
from TABLE
order by 1
) A
where ROWNUM <= 20
)
where RN >= 11;
Cursor-based Pagination
728x90
반응형
'DB' 카테고리의 다른 글
ORACLE NCHAR vs NVARCHAR2 (0) | 2021.10.07 |
---|---|
Mybatis 글자수 4000bytes 이상 ora-01461 에러 (0) | 2021.02.04 |
Oracle 특수문자 검색 (0) | 2020.05.25 |
Oracle vs MySQL (0) | 2019.07.14 |
Data Mart (0) | 2016.05.08 |
반응형
300x250