У меня есть запрос для выборки записей по номерам страниц, как следовать,Почему мой запрос медленный для получения записей с большим смещением?
SELECT
FirstName = R.FirstName,
LastName = R.LastName,
CountryId = R.CountryID,
......
FROM Resource AS R
WHERE ...
ORDER BY LastName, FirstName
OFFSET 10 * (@PageNumber - 1) ROWS
FETCH NEXT 10 ROWS ONLY
Общее количество записей составляет более 30,000.
- Когда
@PageNumber = 1
, время работы составляет менее 1 секунды, почти сразу. - Когда
@PageNumber = 500
, время работы около 4s. - Когда
@PageNumber = 1000
, время работы меньше 12 секунд. - Когда
@PageNumber = 2000
, время работы составляет менее 20 секунд. - Когда
@PageNumber = 3000
, время работы составляет менее 28 секунд.
Интересно, почему гораздо медленнее извлекать записи с большим смещением, чем меньшие, потому что общее количество выбранных строк одинаково (10). Похоже, что запрос извлекает передние записи намного быстрее, чем те, которые сидят позади. Или что-то не так в запросе?
Вы посмотрели план выполнения? Что он говорит? – peterm