SQL Server - Przyspieszenie liczenia na dużym stole

Mam stół blisko30 milionów dokumentacja. Tylko kilka kolumn. Jedna z kolumn'Born' nie więcej niż30 różnych wartości i jest na niej zdefiniowany indeks. Muszę mieć możliwość filtrowania w tej kolumnie i efektywnego przeglądania wyników.

Na razie mam (przykład, jeśli rok, którego szukam, to „1970” - jest to parametr w mojej procedurze przechowywanej):

WITH PersonSubset as
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY Born asc) AS Row
    FROM Person WITH (INDEX(IX_Person_Born)) 
    WHERE Born = '1970'
)
SELECT *, (SELECT count(*) FROM PersonSubset) AS TotalPeople
FROM PersonSubset
WHERE Row BETWEEN 0 AND 30

Każde zapytanie tego rodzaju (tylkoBorn użyty parametr) zwraca ponad milion wyników. Zauważyłem, że największe obciążenie dotyczy liczby użytej do zwrócenia wszystkich wyników. Jeśli usunę(SELECT count(*) FROM PersonSubset) AS TotalPeople z klauzuli select cała rzecz bardzo przyspiesza.

Czy istnieje sposób na przyspieszenie liczenia w tym zapytaniu. To, na czym mi zależy, to zwrócenie wyników stronicowania i całkowitej liczby.

questionAnswers(4)

yourAnswerToTheQuestion