РЕДАКТИРОВАТЬ: Я все еще жду больше ответов. Спасибо!
В SQL 2000 дней я использовал метод временной таблицы, где вы создаете временную таблицу с новым столбцом идентификаторов и первичным ключом, а затем выбираете, где столбец идентификаторов находится между A и B.
Когда SQL 2005 появился, я узнал о Row_Number()
и использую его с тех пор ...
Но теперь я обнаружил серьезную проблему с производительностью Row_Number()
.
Он работает очень хорошо, когда вы работаете с не столь гигантскими наборами результатов и сортируете по столбцу идентификаторов. Однако он работает очень плохо , когда вы работаете с большими наборами результатов , такими как более 10000 записей и , сортирующими его по столбцу без идентификатора . Row_Number()
работает плохо, даже если вы сортируете по столбцу идентификаторов, если набор результатов превышает 250 000 записей. Для меня это дошло до того, что выдает ошибку: « команда timeout! »
Что вы используете для разбивки большого набора результатов в SQL 2005?
В этом случае метод временных таблиц еще лучше? Я не уверен, что этот метод с использованием временной таблицы с SET ROWCOUNT будет работать лучше ... Но некоторые говорят, что есть проблема с неправильным номером строки, если у вас есть первичный ключ из нескольких столбцов.
В моем случае мне нужно иметь возможность сортировать результаты по столбцу типа даты ... для моего рабочего веб-приложения.
Дайте мне знать, что вы используете для высокопроизводительной нумерации страниц в SQL 2005 . И я также хотел бы знать умный способ создания индексов. Я подозреваю, что выбор правильных первичных ключей и / или индексов (кластеризованных / некластеризованных) сыграет здесь большую роль.
Заранее спасибо.
P.S. Кто-нибудь знает, что использует stackoverflow?
РЕДАКТИРОВАТЬ: Моя выглядит примерно так ...
SELECT postID, postTitle, postDate
FROM
(SELECT postID, postTitle, postDate,
ROW_NUMBER() OVER(ORDER BY postDate DESC, postID DESC) as RowNum
FROM MyTable
) as DerivedMyTable
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1
postID: Int, Identity (автоинкремент), первичный ключ
postDate: DateTime
РЕДАКТИРОВАТЬ: Все используют Row_Number ()?