Spring MVC_basic.7 페이징 처리의 개념

dwanGim·2022년 6월 13일
0

spring_basic

목록 보기
6/41

hint

페이징 처리는 게시판의 모든 글을 보여주지 않고

n개씩 끊어서 보여주는 처리를 의미합니다.

Oracle sql에서는 rownum이라는 개념을 이용해 처리합니다.

많은 글들을 빠르게 조회하기 위해

orcle에서는 hint라는 구문을 쿼리문에 삽입해서 처리합니다.

SELECT
/*+ 힌트가 들어갈자리 */
* FROM board_tbl;

과 같은 형식으로 오라클에서 사용합니다.

오라클 sql에 힌트를 줌으로 더 빠르게 조회 구문을 처리하도록 도와줄 수 있습니다.

/*+ 가 여는 부분

*/ 가 닫는 부분인데

주석이나 마찬가지라 잘못된 힌트를 삽입해도 구문에러는 나지 않습니다.

SELECT *
/*+ INDEX_DESC(board_tbl pk_board) */
FROM board_tbl ORDER BY bno DESC;

저는 예전에 pk_board라는 이름으로 bno에 primary key를 부여했습니다.

따라서 board_tbl 테이블의 pk_board를 기준으로 인덱싱을 하라는

힌트를 오라클에게 넘겨주었습니다.

130000개가 넘는 글들을 빠르게 조회할 수 있었습니다.

그렇다면 이렇게 편리하게 힌트 구문에 집어넣을 수 있는

인덱스들을 어떻게 얻어와야 할까요.

바로 rownum, rowid를 select문의 조회 컬럼에 추가하여

조회하는 겁니다.

rownum, rowid는 *과 테이블명을 함께 사용할 때 작성됩니다.


rownum, rowid

SELECT
/*+ INDEX_DESC(board_tbl pk_board) */
rownum, rowid, board_tbl.* FROM board_tbl;

위와 같이 rowid라는 저장 번지수를 통해 조회가 가능하며

rownum은 정렬된 row에서 1번부터 번호를 매겨주어 조회가 되는

구조입니다.

그러므로 row의 id와 컬럼이 모두 조회된 후에

마지막으로 rownum이 설정됩니다.

이렇게 rownum이 20 미만인 row만 조회한다면 어떨까요?

만약 페이지 당 10개의 글이 있다면 이것은 2페이지 분량의 글을

조회한 것 입니다.

rownum 20번까지 조회했던 구문을 서브쿼리 형태로 감쌉니다.

이제 11번 이후의 10개 글만 조회가 됩니다.

10보다 큰 rn만 남겼기 때문입니다.

만약 5페이지의 글을 보고 싶다면

1페이지가 1~10번 글

2페이지는 11~ 20번 글 ...

과 같은 형식으로 이어질 겁니다.

그러면 5페이지는 41~50페이지겠지요.

위와 같이 (페이지 * 10)을 서브쿼리 내부의 조건절로

그리고 ((페이지 - 1) * 10)을

((5-1) * 10) 대입해서 바깥쪽 쿼리의 조건절로 넣으면 5페이지를

구할 수 있습니다.

페이지 변수만 바꿔주면 원하는 rownum의 페이지를

불러올 수 있는 구조입니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글