Mam Employeetabelę, która ma milion rekordów. Mam następujące SQL do stronicowania danych w aplikacji internetowej. Działa dobrze. Jednak widzę problem - pochodna tabela tblEmployeewybiera wszystkie rekordy w Employeetabeli (aby utworzyć MyRowNumberwartości).
Myślę, że to powoduje wybór wszystkich rekordów w Employeetabeli.
Czy to naprawdę tak działa? Czy też SQL Server jest zoptymalizowany pod kątem wybrania tylko 5 rekordów z oryginalnej Employeetabeli?
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