php 에서 mssql 페이징 기법(게시판)
페이지 정보
본문
오늘날 우리는 다양한 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만건을 매번 풀스캔하는 아주 불행한
결과를 초래할 것이다.
웹 프로그래밍을 꼽을 수 있을 것이다.
그 중 서버에 따라 언어와 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만건을 매번 풀스캔하는 아주 불행한
결과를 초래할 것이다.
관련링크
- 이전글javascript 배너 이미지 랜덤 표시 20.02.21
- 다음글javascript 자바스크립트로 form 작성 20.02.21
댓글목록
등록된 댓글이 없습니다.