티스토리 뷰
SQL Server 에서의 paging 처리방법입니다.
버전에 따라서 방법이 다른데요.
2012버전에서 사용하는 ROW OFFSET 방식이 이전버전들에비해 20% 정도 성능향상이 있다고 합니다.
그리고 코드가 간결해져서 좋군요. :D
그런데 여기에는 TotalPage 가 없습니다. paging 처리할때 꼭 필요한데요.
시퀀스 값을 가져오거나..
Where 구문이 들어간다면, 별도로 Count 를 Select 해야할것 같습니다.
(근데 SQL 툴에서 OFFSET 과 ONLY 가 검정색으로 표시되네요. 그래도 실행은 잘됩니다.)
[SQL Server 2012]
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 6 SELECT SalesOrderDetailID, SalesOrderID, ProductID FROM Sales.SalesOrderDetail ORDER BY SalesOrderDetailID OFFSET (@PageNumber-1)*@RowsPerPage ROWS FETCH NEXT @RowsPerPage ROWS ONLY
[SQL Server 2008 / R2 / SQL Server 2005]
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 6 SELECT SalesOrderDetailID, SalesOrderID, ProductID FROM ( SELECT SalesOrderDetailID, SalesOrderID, ProductID, ROW_NUMBER() OVER (ORDER BY SalesOrderDetailID) AS RowNum FROM Sales.SalesOrderDetail ) AS SOD WHERE SOD.RowNum BETWEEN ((@PageNumber-1)*@RowsPerPage)+1 AND @RowsPerPage*(@PageNumber)
[SQL Server 2000]
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 6 SELECT SalesOrderDetailID, SalesOrderID, ProductID FROM ( SELECT TOP (@RowsPerPage) SalesOrderDetailID, SalesOrderID, ProductID FROM ( SELECT TOP ((@PageNumber)*@RowsPerPage) SalesOrderDetailID, SalesOrderID, ProductID FROM Sales.SalesOrderDetail ORDER BY SalesOrderDetailID ) AS SOD ORDER BY SalesOrderDetailID DESC ) AS SOD2 ORDER BY SalesOrderDetailID ASC
아래는 MS의 가이드입니다. paging query 에 대해 원리와 실행계획 성능등을 다루고 있습니다.
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx
[출처] blog.sqlauthority.com
[작성] devbible.tistory.com
'Development' 카테고리의 다른 글
[Java] SimpleDateFormat HH vs kk (1) | 2017.01.04 |
---|---|
[Java] StringJoiner (comma separated string) (0) | 2016.04.08 |
[Spring] Spring 3.x 에서 protocol buffer API 적용하기 (0) | 2016.03.17 |
[Redis] INFO vs MONITOR (0) | 2016.03.08 |
[Linux] tar , tar.gz 압축 및 해제 (0) | 2016.01.03 |
댓글
최근에 올라온 글
글 보관함
- Total
- Today
- Yesterday