1. 네이버에서 검색을 해봤다
MSSQL 페이징 처리
http://blog.naver.com/ifuture74/60008703576
게시물은 100만개를 넣고 테스트를 했습니다.이게 high 퍼포먼스의 6번 쿼리 내용이다. 이 결과를 보면 무조건 6번을 선택해야 한다.
테스트 게시판을 보시려면.. 맨위에 각 게시판을 링크를 걸었습니다.
서버가 구려서.. 제대로 될지 모르지만..
제 노트북
(CPU : p4-1.8, RAM : 768Mb, 컴팩 프리자리오 2820AP, 환경 : 윈도우2003 MSSQL2000)
에서 테스트 해본 봐로는 처음페이지(1), 마지막 페이지(50000) 처리 시간이 아래와 같습니다.(단위 ms)1 : 320 12289.06
2 : 273 11476.56
3 : 289 4406.25
4 : 289 2695.31
5 : 289 1218.75
6 : 7.81 23.44
SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블명]
WHERE [글번호] <= ( SELECT MIN([글번호])
FROM ( SELECT TOP [제거할 게시물수] + 1 [글번호]
FROM [테이블명] WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호] ) AS A
WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호] )
AND [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]
그리고, 아래와 같은 방법도 있다.
페이징에대한 엔코아거 소개
http://blog.naver.com/locusty/80014513540
2. 여기부터는 구글신과 함께 검색을~~
Paging in MSSQL
http://lejalgenes.com/techtips/tips/Microsoft_SQL_Server/Paging_in_MSSQL.php
--> 이 방법은 not in 1번, order by 2번 실행이 되었다. 대용량에서는는 비추!!
Paging results in MS SQL Server
http://josephlindsay.com/archives/2005/05/27/paging-results-in-ms-sql-server/
--> 이것은 내가 쓰는 방식하고 똑같지 않은가? 오라클에서 페이징 처리할 때 rownum을 이용해서 비슷하게 쿼리를 작성을 했었다. 오라클에서는 hint를 사용해서 order by 에 대한 비용을 최소화 했는데, MSSQL은 order by를 두번 사용하는 비용이 만만치는 않다.
다양한 덧글들이 올라왔으나, not in을 사용한 것은 일단 무시하기로 하고, 최고의 복잡도를 자랑하는 not in을 웬간해서는 사용하면 안된다.
SELECT * FROM ( SELECT TOP x * FROM (
SELECT TOP y fields
FROM table
WHERE conditions
ORDER BY table.field ASC) as foo
ORDER by field DESC) as barORDER by field ASC
테스트
나도 백만건 정도 입력을 하고, 테스트를 해보려고 한다...^^
* 기존 오라클을 사용할 때의 습성에 따라 josephlindsay와 같은 쿼리 구조를 사용을 했다. order by를 2번 사용했지만, 인덱스가 걸린 필드를 사용한다면 만족할 만한 성능이 나올거라는 생각이다.
