加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在SQL Server上执行分页的最佳方法是什么?

发布时间:2020-12-15 06:36:05 所属栏目:百科 来源:网络整理
导读:我有一个超过200万条记录的数据库,我需要在我的Web应用程序上执行分页,以便在DataGrid中每页10条记录. 我已经尝试使用ROW_NUMBER(),但这样将会选择所有的200万条记录,然后只得到10条记录.我也尝试使用TOP 10,但我必须保存第一个和最后一个id来控制页面.我读
我有一个超过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关键字,您将在上面看到您想要的结果.

谢谢

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读