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.
반응형