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.