为了账号安全,请及时绑定邮箱和手机立即绑定

实现分页的有效方法

实现分页的有效方法

胡说叔叔 2019-08-30 14:42:36
我应该使用LINQ Skip()和Take()方法进行分页,还是使用SQL查询实现自己的分页?哪个最有效?为什么我会选择一个而不是另一个?我正在使用SQL Server 2008,ASP.NET MVC和LINQ。
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

尝试使用


FROM [TableX]

ORDER BY [FieldX]

OFFSET 500 ROWS

FETCH NEXT 100 ROWS ONLY

在SQL服务器中获取501到600的行,而不将它们加载到内存中。请注意,此语法仅适用于SQL Server 2012


查看完整回答
反对 回复 2019-08-30
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

然LINQ-to-SQL将生成一个OFFSET子句(可能使用ROW_NUMBER() OVER() 其他人提到的模拟),但在SQL中执行分页的方式却完全不同,更快。这通常被称为“搜索方法”,如本博客文章中所述。


SELECT TOP 10 first_name, last_name, score

FROM players

WHERE (score < @previousScore)

   OR (score = @previousScore AND player_id < @previousPlayerId)

ORDER BY score DESC, player_id DESC

该@previousScore和@previousPlayerId值是来自前一页的最后一条记录的相应值。这允许您获取“下一页”。如果ORDER BY方向是ASC,只需使用>。


使用上述方法,您无法在未先读取前40条记录的情况下立即跳转到第4页。但通常情况下,你不想跳得那么远。相反,您可以获得更快的查询,该查询可能能够在固定时间内获取数据,具体取决于您的索引。此外,无论基础数据是否发生变化,您的页面都将保持“稳定”状态(例如,在第4页上,当您在第4页时)。


例如,这是在Web应用程序中延迟加载更多数据时实现分页的最佳方法。


注意,“搜索方法”也称为键集寻呼。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 456 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信