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까지 똑같다.
댓글
댓글 쓰기