티스토리 뷰

Development

[SQL SERVER] paging query

devbible 2016. 3. 25. 10:09

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

댓글