DB별 페이징처리 방법

DB별 사용법이 귀찮다면 "FETCH FIRST {size} ROWS ONLY"를 사용하자
offset 보다는 lastSeenKey 사용하는 것을 권장한다. 대용량 데이터에서는 속도차가 크다.

- MySQL: "limit {offset}, {size}"를 사용하지 말고,
```sql
SELECT  FROM students 
WHERE student_id > {lastSeenKey}
ORDER BY height DESC,name ASC 
LIMIT {size}
```

- Oracle: 정렬이 먼저 수행되므로 subquery로 처리한다
```sql
SELECT  FROM (
	SELECT a., ROWNUM as rnum FROM (
		SELECT  FROM students ORDER BY height DESC,name ASC
		)
	a)  WHERE rnum >= {offset} and rnum <= {offset} + {size}
```
"FETCH FIRST {size} ROWS ONLY"를 사용해도 된다. (PostgreSQL 예제 참고)

- PostgreSQL: "offset {offset} limit {size}"를 사용하지 말고,
```sql
SELECT  FROM students 
WHERE student_id > {lastSeenKey}
ORDER BY height DESC,name ASC 
LIMIT {size}
```
"LIMIT {size}" 대신에 "FETCH FIRST {size} ROWS ONLY"를 써도 plan까지 똑같다.

댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기