DB

새로운 페이징 기법

김모작자 2013. 10. 28. 17:17

MSSQL 에서만 되는거 같은데...
임시 테이블 없이 SET ROWCOUNT 만으로 간결하지만 엄청난 성능을 보여주는 쿼리를 찾았다

원문은 http://www.4guysfromrolla.com/webtech/042606-1.shtml
여기를 참고하면 된다. 글 하단에 벤치마킹한 데이터가 있는데 잘못 측정했나 싶을정도로 성능 차이가 난다

내가 테스트 해 본 쿼리는

alter procedure TEST_paging
 @PageNo int
as
begin
 declare @PageSize int; set @PageSize = 10;
 declare @FileNo bigint, @RowsBefore int;

 set @RowsBefore = (@PageNo - 1) * @PageSize + 1;

 -- 해당 페이지의 첫번째 레코드의 PK를 찾는다
 set rowcount @RowsBefore;
 select @FileNo = FileNo from Files;

 -- 페이지에 표시할 갯수만큼 레코드를 읽는다
 set rowcount @PageSize;
 select * from files where FileNo > @FileNo;

 set rowcount 0;
end

Files 테이블에 FileNo 가 PK 로 있고 부수적인 필드가 있다고 가정할때 위와 같은 코드로
페이징을 구현하였다.

주의해야할 점은 @FileNo 처럼 순서를 잡을 수 있는 필드가 있어야 한다

What a nice query.