我有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
答案 0 :(得分:0)
你有个好主意考虑是否更快
-pull所有行在某处然后过滤
-pull仅有限的行。
您还可以通过TOP或Row_Number实现查询,但仍可以先拉出所有行。
如果要显式控制拉出的行数,则需要在应用程序中管理分页参数,并且只对下一个范围运行查询。
对于您的应用程序,这可能会或可能不会更快。这取决于记录总数,分页大小和网络速度......以及应用程序架构(你有一个很好的缓存解决方案吗?你能分享结果吗?......?)