ROW_NUMBER () ПО Не Достаточно быстро С Большим Набором результатов, каким-либо хорошим решением?

Я использую ROW_NUMBER (), чтобы сделать подкачку страниц с моим содержанием веб-сайта и когда Вы поражаете последнюю страницу это тайм-аут, потому что SQL Server занимает слишком много времени завершать поиск.

Уже существует статья относительно этой проблемы, но еще не кажется никаким идеальным решением.

http://weblogs.asp.net/eporter/archive/2006/10/17/ROW5F00NUMBER28002900-OVER-Not-Fast-Enough-With-Large-Result-Set.aspx

Когда я нажимаю последнюю страницу StackOverflow, требуется меньше секунда для возврата страницы, которая действительно быстра. Я задаюсь вопросом, есть ли у них очень быстрые серверы баз данных, или просто у них есть решение для ROW_NUMBER () проблема?

Какая-либо идея?

7
задан OMG Ponies 14 December 2009 в 06:44
поделиться

2 ответа

Много лет назад, работая с Sql Server 2000, в котором не было этой функции, у нас была такая же проблема.

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

Попробуйте это

DECLARE @Table TABLE(
        ID INT PRIMARY KEY
)

--insert some values, as many as required.

DECLARE @I INT
SET @I = 0
WHILE @I < 100000
BEGIN
    INSERT INTO @Table SELECT @I
    SET @I = @I + 1
END

DECLARE @Start INT,
        @Count INT

SELECT  @Start = 10001,
        @Count = 50

SELECT  *
FROM    (       
            SELECT  TOP (@Count)
                    *
            FROM    (
                        SELECT  TOP (@Start + @Count)
                                *
                        FROM    @Table
                        ORDER BY ID ASC
                    ) TopAsc
            ORDER BY ID DESC
        ) TopDesc
ORDER BY ID
5
ответ дан 7 December 2019 в 07:46
поделиться

The base logic of this method relies on the SET ROWCOUNT expression to both skip the unwanted rows and fetch the desired ones:

DECLARE @Sort /* the type of the sorting column */
SET ROWCOUNT @StartRow
SELECT @Sort = SortColumn FROM Table ORDER BY SortColumn
SET ROWCOUNT @PageSize
SELECT ... FROM Table WHERE SortColumn >= @Sort ORDER BY SortColumn

The issue is well covered in this CodeProject article, including scalability graphs.

TOP is supported on SQL Server 2000, but only static values. Eg no "TOP (@Var)", only "TOP 200"

2
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: