Эффективный пейджинг с большими таблицами в sql 2008

для таблиц s > 1,000,000 строк и, возможно, многих других!

не сделали никакого бенчмаркинга, поэтому я хотел получить мнение экспертов.

Посмотрел на некоторые статьи о row_number(), но, похоже, это повлияло на производительность.

Каковы другие варианты/альтернативы?

Ответы

Ответ 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 строк.