Mam Employee
tabelę, 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 tblEmployee
wybiera wszystkie rekordy w Employee
tabeli (aby utworzyć MyRowNumber
wartości).
Myślę, że to powoduje wybór wszystkich rekordów w Employee
tabeli.
Czy to naprawdę tak działa? Czy też SQL Server jest zoptymalizowany pod kątem wybrania tylko 5 rekordów z oryginalnej Employee
tabeli?
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