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

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

任何的想法?

回答:

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

以上是 ROW_NUMBER()OVER不够快,结果集很大,有什么好的解决方案吗? 的全部内容, 来源链接: utcz.com/qa/397652.html

回到顶部