SQL Server - ускорить счет на большой таблице
У меня есть стол с близким30 миллионов записей. Всего несколько столбцов. Один из столбца'Born'
не более чем30 разных значений и есть индекс, определенный на нем. Мне нужно иметь возможность фильтровать по этому столбцу и эффективно просматривать результаты.
На данный момент у меня есть (например, если год "Я ищу это1970' - это параметр в моей хранимой процедуре):
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
Каждый запрос такого рода (толькоBorn
используемый параметр) возвращает чуть более 1 миллиона результатов. Я'мы заметили, что самые большие накладные расходы находятся на счетчике, используемом для получения итоговых результатов. Если я удалю(SELECT count(*) FROM PersonSubset) AS TotalPeople
из условия выбора все это значительно ускоряется.
Есть ли способ ускорить подсчет в этом запросе. Что меня волнует, так это чтобы возвращались постраничные результаты и общее количество.