php 에서 mssql 페이징 기법(게시판) > 질문답변

본문 바로가기
사이트 내 전체검색

질문답변

php 에서 mssql 페이징 기법(게시판)

페이지 정보

profile_image
작성자 미친새
댓글 0건 조회 31,022회 작성일 20-02-21 11:41

본문

오늘날 우리는 다양한  IT의 진화속에 그 중 가장 큰 발전을 이룬 분야를 꼽아 보자면

웹 프로그래밍을 꼽을 수 있을 것이다.

그 중 서버에 따라 언어와 DBMS가 갈리겠지만

리눅스 (Oracle, Java OR Mysql, PHP),  윈도우 (SQL Server, .net ) 등이 있을 것이다.


많은 웹 개발자들이 웹 개발에 있어서는 훌륭한 기술을 보유하고 있지만

데이터베이스 접근에 있어서는 배재하고 있는 (혹은 잘 모르는) 부분이 많이 있다.

그 중 하나가 지금부터 설명할 페이징 기법이다.

물론 어느 정도 경력이 되는 웹 개발자에게 있어서는 당연히 처리 해야할 부분이지만,

초급 개발자 혹은 * DB에 별 관심이 없는 개발자는 유연한 처리가 안되고 있는 부분이다.

처음 웹을 개발 했을때 개발자들은 어느 정도 더미 데이터를 넣고 테스트를 할 것이다.


하지만 그 더미 데이터의 양에 따라 나중에 서버에 큰 부하를 줄 수 있다.

일반적으로 더미 데이터는 10만건 이상 (현재 인터넷은 날로 발전하고 있고,



웹사이트의 방문자양에 따라 다르겠지만 게시판 하나만 보더라도 10만건 이상의 데이터가 쌓이는


서버는 상당히 많다) 의 데이터를 사용하는 것이 좋다.

만일 1~200건의 더미 데이터를 넣어서 테스트 하고 '아~ 잘된다' 라고 생각하고 접는다면

화장실에서 볼일을 보고 뒷처리를 안하고 나오는 사람과 꼭 같은 경우리고 할 수 있다.


이제부터 간단히 페이징 기법들에 대해 알아 보자



1. NOT IN  (TOP)

 SELECT TOP 페이지 사이즈 *
FROM table_name

WHERE id NOT IN

(

SELECT TOP (페이지 -1) *  페이지 리스트 사이즈 id

FROM table_name

)

 2. ROW_NUMBER

 SELECT *
 FROM
 (
 SELECT ROWNUMBER() OVER (ORDER BY id DESC) rnum, *
 FROM table_name)
 ) A
 WHERE rnum BETWEEN (페이지 사이즈 * 페이지 리스트사이즈 ) + 1 AND (페이지 사이즈 * 페이지 리스트사이즈 ) + (페이지 사이즈 + 1)

 3. DECLARE 사용

 

DECLARE @id int

 

SELECT TOP (페이지 사이즈 * 리스트 사이즈 + 1) id

FROM table_name

 

SELECT TOP 페이지 사이즈 *

FROM table_name

WHERE id > @id

 

4. TOP TOP

 SELECT TOP 페이지 사이즈 *
FROM
 (
 SELECT TOP (페이지 사이즈 * 페이지 리스트 사이즈 + 1) *
 FROM table_name)
 ) A

 

위 쿼리들은 정렬 부분은 배재한 쿼리이다.
물론 id 는 인덱스 혹은 PK 인 컬럼이다
어떤 방식을 사용하는지는 개인적인 부분이지만 개인적으로 3번과 4번을 추천한다.

 
왜 페이징을 사용해야 할까??
만일 데이터가 10만건이 있다고 하고 한 페이지당 30건의 데이터를 보여준다고 하자
실제로 클라이언트(사용자) 에게 보여줄 데이터는 단 30건에 불과 한데

페이징 처리로 데이터를 나누지 않는다면 10만건을 매번 풀스캔하는 아주 불행한
결과를 초래할 것이다.

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

공지사항

  • 게시물이 없습니다.

접속자집계

오늘
1,637
어제
1,763
최대
5,296
전체
1,482,694
Copyright © 소유하신 도메인. All rights reserved.