一尘不染

ROW_NUMBER()OVER不够快,结果集很大,有什么好的解决方案吗?

sql

我使用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()问题的解决方案?

任何的想法?


阅读 411

收藏
2021-03-10

共1个答案

一尘不染

几年前,当使用不具有此功能的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
2021-03-10