Срещнах някои проблеми с производителността, използвайки метода COUNT() OVER(). (Не съм сигурен дали беше сървърът, тъй като бяха необходими 40 секунди, за да се върнат 10 записа и след това нямаше никакви проблеми.) Тази техника работи при всякакви условия, без да се налага да използва COUNT( ) OVER() и постига същото нещо:
DECLARE
@PageSize INT = 10,
@PageNum INT = 1;
WITH TempResult AS(
SELECT ID, Name
FROM Table
), TempCount AS (
SELECT COUNT(*) AS MaxRows FROM TempResult
)
SELECT *
FROM TempResult, TempCount
ORDER BY TempResult.Name
OFFSET (@PageNum-1)*@PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY