Employee백만 개의 레코드 가있는 테이블이 있습니다. 웹 응용 프로그램에서 데이터를 페이징하기 위해 다음 SQL이 있습니다. 잘 작동합니다. 그러나 내가 문제로 보는 것은 파생 테이블 이 값 을 만들기 위해 테이블의 tblEmployee모든 레코드를 선택 Employee한다는 것 MyRowNumber입니다.
이로 인해 Employee테이블 의 모든 레코드가 선택 됩니다.
정말 효과가 있습니까? 아니면 SQL Server가 원본 Employee테이블 에서 5 개의 레코드 만 선택하도록 최적화 되었습니까?
DECLARE @Index INT;
DECLARE @PageSize INT;
SET @Index = 3;
SET @PageSize = 5;
SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,*
FROM Employee) tblEmployee
WHERE MyRowNumber BETWEEN ( ((@Index - 1) * @PageSize )+ 1) AND @Index*@PageSize