- 페이징에서 DB로 가져와야 할 값은 2가지이다.
1. 페이징 처리해야 할 전체 데이터(row의 수)
2. 화면에 보여줘야 할 데이터의 List
- 페이징 할 테이블이다.
CREATE TABLE COFFEE(
CID INT PRIMARY KEY,
CNAME VARCHAR(300) NOT NULL,
CCOUNTRY VARCHAR(100) NOT NULL,
CNUM INT DEFAULT 0,
CPRICE INT NOT NULL,
CCONTENT VARCHAR(300),
CPIC VARCHAR(500)
);
[페이징 처리해야 할 전체 데이터(row의 수)]
private final String COFFEELIST_CNT = "SELECT COUNT(*) AS LISTCNT FROM COFFEE";
여기에 검색 기능이 들어가게 되면 sql문 뒤에 조건을 달면 된다.
ex) 이름 검색 : COFFEELIST_CNT+" WHERE CNAME LIKE '%'||?||'%'";
[화면에 보여줘야 할 데이터의 List]
ex) 예시
- Coffee테이블의 1~5번 데이터를 가져와야 한다.
: Row Number를 사용해야 한다.
*Row Number란?
출력되는 결과물에 순차적인 번호를 달아주는 기능.
출력되어야 할 순서대로 정렬한 뒤 가상의 번호인 Row Number를 달아주어 원하는 영역의 자료만 가져올 수 있는 방식을 취한다.
but, 시스템에 부하를 주어 많은 게시물을 가지고 있는 경우 특정 영역의 게시물들을 가져오는데 그 반응이 느려진다.
1. 페이지에 번호 붙이기
SELECT ROWNUM AS RNUM, CNAME, CPRICE FROM COFFEE ORDER BY CPRICE;
가격순으로 정렬했으나 RNUM은 그에 맞춰 순서대로 출력이 되지 않는다. 이는 SQL 쿼리의 실행 순 때문이다.
-SQL 쿼리 순서-
[ FROM - WHERE -GROUP BY -HAVING- SELECT -ORDER BY ]
Row Number은 SELECT 다음에, ORDER BY 전에 할당된다.
따라서 정렬을 한 후(서브 쿼리)에 번호를 부여하는 방식을 사용한다.
SELECT ROWNUM AS RNUM, A.* FROM
(SELECT CNAME, CPRICE FROM COFFEE ORDER BY CPRICE DESC) A;
2. 원하는 만큼의 데이터 가져오기
숫자 범위를 이용해 값을 가져오는 방법: BETWEEN - AND -
SELECT ROWNUM AS RNUM, A.* FROM
(SELECT CNAME, CPRICE FROM COFFEE ORDER BY CPRICE DESC) A
WHERE ROWNUM BETWEEN 1 AND 5;
쉽게 가져올 수 있지만 이러한 방법은 모든 데이터에 ROWNUM을 부여한 후, 그 데이터에서 숫자의 범위를 가져오는 방식으로 시스템에 부하를 주어 수많은 데이터가 있다면 속도가 눈에 띄게 저하되는 모습을 볼 수 있다. 때문에 서브 쿼리를 한번 더 사용해 최적화를 해준다.
SELECT * FROM
(SELECT ROWNUM RNUM, A.*FROM
(SELECT CNAME, CPRICE FROM COFFEE ORDER BY CPRICE DESC)
A WHERE ROWNUM<=5)X WHERE X.RNUM >=1;
같은 결괏값이지만 이러한 방법은 ROWNUM을 부여하다 5번째 이후 데이터는 버린다. 이후 5개 안에서 앞에서부터 데이터를 가져오기 때문에 속도 차이가 발생한다.
3. 조건 걸어주기(검색)
SELECT * FROM
(SELECT A.*, ROWNUM RNUM FROM
(SELECT CNAME, CPRICE FROM COFFEE
WHERE CNAME LIKE '%에%' ORDER BY CPRICE DESC)
A WHERE ROWNUM<=5)X WHERE X.RNUM >=1;
*소감:
SQL 쿼리의 실행 순서는 출력하는 내용에 큰 차이를 보여준다면, 최적화는 같은 내용을 출력해 주더라도 속도 향상에 큰 차이를 보여 사용자 편의성을 높여줄 수 있다는 점에서 매우 매력적으로 느껴졌다.
-참고사이트-
https://okky.kr/article/282926
OKKY | 페이징(Paging)에 대한 이해 - (2) ROW NUMBER 을 이용한 게시물 가져오기.
흔히 웹 개발을 처음 하는 개발자가 처음 겪게 되는 난관은 바로 게시판의 페이징(Paging)이 아닐까 합니다. 특히 DBMS 와 연동해서 개발하는 경우가 많은데, 각 DBMS 마다 페이징 방법도 많고 성능
okky.kr
'Project' 카테고리의 다른 글
Personal 1-1) [커피 쇼핑몰] 프로젝트 설계 (0) | 2022.04.15 |
---|---|
Team5) [맛집 추천 사이트] (JSP,JS,AJAX,HTML,CSS) 오늘의 메뉴 (0) | 2022.04.15 |
Team 5-4) (JAVA, JSP) 데이터 크롤링 (0) | 2022.04.14 |
Team 5-3)(JSP,JAVA,HTML) 관리자 페이지 (0) | 2022.04.14 |
Team5-2) (HTML,JS,JSP) [맛집 추천 사이트] 검색, 검색 리스트 (0) | 2022.04.14 |
댓글