我有一个超过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
这是我用于分页的查询.使用它,你会得到你需要10个记录4-5秒.我在3秒内获得10条记录,我的数据库中的总记录是1000万,不要使用前10名,每次只能带来相同的10条记录.在我的情况下,我在会话中维护页面大小和起始行号(@FromRow),并将这两个值传递给下面给出的存储过程并获取结果.
更进一步如果您使用sql 2012,您可能需要使用OFFSET和Fetch接下来的10行的事情.在google上搜索关于OFFSET关键字,您将在上面看到您想要的结果.
谢谢