Ответ 1
Мы используем row_number()
для отличного эффекта, и с ним не было никаких проблем с производительностью. Основная структура наших постраничных запросов выглядит так:
WITH result_set AS (
SELECT
ROW_NUMBER() OVER (ORDER BY <ordering>) AS [row_number],
x, y, z
FROM
table
WHERE
<search-clauses>
) SELECT
*
FROM
result_set
WHERE
[row_number] BETWEEN a AND b
Он отлично работает для нас на таблицах s > 1,000,000 строк.