我的数据库具有超过200万条记录,并且需要执行分页以在我的Web应用程序上显示,该应用程序必须在DataGrid
中每页必须有10条记录。
我已经尝试使用ROW_NUMBER()
,但是这种方式将选择所有200万条记录,然后仅获得10条记录。我也尝试使用TOP 10
,但是我必须保存第一个和最后一个ID才能控制页面。而且我已经读过,使用DataAdapter.Fill()
将选择所有内容,然后获取我需要的10条记录。
最好的方法是什么?我应该使用DataAdapter.Fill()
吗?还是使用SQL Server的函数ROW_NUMBER()
?还是尝试使用TOP 10
?
最佳答案
ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
@FromRow int = 1000000,
@PgSize int = 10
AS
BEGIN
;WITH RecordsRN AS
(
select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
)
SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@FromRow+@PgSize-1)
END
这是我用于分页的查询。使用它,您将在4-5秒内获得所需的10条记录。我在3秒内获得10条记录,我的数据库中的总记录为1000万,不要使用前10条记录,每次只会带来相同的10条记录。就我而言,我在 session 中保持页面大小和起始行号(@FromRow),并将这两个值传递给以下给定的存储过程并获得结果。
此外,如果您使用的是SQL 2012,则可能需要使用OFFSET和Fetch接下来的10行。在Google上搜索有关OFFSET关键字的信息,您将在顶部看到所需的结果。
谢谢
关于c# - 在SQL Server上执行分页的最佳方法是哪种?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14339365/