Эффективный пейджинг с большими таблицами в SQL 2008 - PullRequest
15 голосов
/ 15 марта 2010

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

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

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

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

1 Ответ

18 голосов
/ 15 марта 2010

Мы используем 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

Он отлично работает для нас с таблицами с> 1 000 000 строк.

...