2

我有性能非常重要的 ASP.NET 网站。该网站有效,但性能低下。我必须提高这个项目的性能。

首先,我在该项目的报告中看到网格中的分页。我不得不说这个项目的数据库是SQL Server 2000,我使用临时表进行分页,但我认为这个存储过程。我获取了所有记录,然后我选择了 10 行这个结果,我认为它效率不高。因为它获取了 50000 行但选择了其中的 10 行。

我想每次只获得 10 行的时间。我们想将 SQL Server 版本更改为 2008,我想在 2008 版本中使用分页方法。我搜索了很多。我找到了这个存储过程,但我认为它与我的第一个查询相同;获取所有行然后使用行号。

我想知道在大型数据库中的 SQL Server 2008 中分页的最佳存储过程是什么?欢迎任何提示或技巧。提前致谢。

这是我的第一个分页方法:

USE AdventureWorks
GO
DECLARE  @StartRow INT
DECLARE  @EndRow INT
    SET    @StartRow = 120
    SET @EndRow = 140


CREATE TABLE #tables (RowNumber INT IDENTITY(1,1),
                FirstName VARCHAR(100), LastName VARCHAR(100),
                EmailAddress VARCHAR(100))
INSERT INTO #tables (FirstName, LastName, EmailAddress)
    SELECT    PC.FirstName, PC.LastName, PC.EmailAddress
    FROM    Person.Contact PC
    ORDER BY FirstName, LastName, EmailAddress

SELECT    FirstName, LastName, EmailAddress
    FROM    #tables
    WHERE    RowNumber > @StartRow
        AND RowNumber < @EndRow
DROP TABLE #tables

SQL Server 2008 中的第二个:

SELECT * FROM ( 
     SELECT 
          ROW_NUMBER() OVER (ORDER BY fdate) AS row, * 
     FROM somthing 
) AS a WHERE row BETWEEN 1 AND 10
4

1 回答 1

0

您最好考虑在
某处 -pull 所有行然后过滤
-pull 仅有限的行是否更快。

您也有望实现使用 TOP 或 Row_Number 的查询仍可能首先提取所有行。

如果要显式控制拉取的行数,则需要管理应用程序中的分页参数,并且只对下一个范围运行查询。

这可能会或可能不会对您的应用程序执行得更快。这取决于总记录数、你的分页大小、网络速度……和应用架构(你有好的缓存方案吗?能分享一下结果吗?……?)

于 2014-06-11T02:26:54.473 回答