在大型数据中SQL Server 2008版中分页的最佳存储过程?

时间:2014-05-20 06:47:58

标签: sql sql-server-2008 stored-procedures database-performance custompaging

我有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

1 个答案:

答案 0 :(得分:0)

你有个好主意考虑是否更快 -pull所有行在某处然后过滤
-pull仅有限的行。

您还可以通过TOP或Row_Number实现查询,但仍可以先拉出所有行。

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

对于您的应用程序,这可能会或可能不会更快。这取决于记录总数,分页大小和网络速度......以及应用程序架构(你有一个很好的缓存解决方案吗?你能分享结果吗?......?)