实现分页的有效方法

我应该使用LINQ Skip()和Take()方法进行分页,还是使用SQL查询实现自己的分页?


哪个最有效?为什么我会选择一个而不是另一个?


我正在使用SQL Server 2008,ASP.NET MVC和LINQ。


胡说叔叔
浏览 481回答 3
3回答

繁花不似锦

尝试使用FROM [TableX]ORDER BY [FieldX]OFFSET 500 ROWSFETCH NEXT 100 ROWS ONLY在SQL服务器中获取501到600的行,而不将它们加载到内存中。请注意,此语法仅适用于SQL Server 2012

MMMHUHU

然LINQ-to-SQL将生成一个OFFSET子句(可能使用ROW_NUMBER() OVER() 其他人提到的模拟),但在SQL中执行分页的方式却完全不同,更快。这通常被称为“搜索方法”,如本博客文章中所述。SELECT TOP 10 first_name, last_name, scoreFROM playersWHERE (score < @previousScore)&nbsp; &nbsp;OR (score = @previousScore AND player_id < @previousPlayerId)ORDER BY score DESC, player_id DESC该@previousScore和@previousPlayerId值是来自前一页的最后一条记录的相应值。这允许您获取“下一页”。如果ORDER BY方向是ASC,只需使用>。使用上述方法,您无法在未先读取前40条记录的情况下立即跳转到第4页。但通常情况下,你不想跳得那么远。相反,您可以获得更快的查询,该查询可能能够在固定时间内获取数据,具体取决于您的索引。此外,无论基础数据是否发生变化,您的页面都将保持“稳定”状态(例如,在第4页上,当您在第4页时)。例如,这是在Web应用程序中延迟加载更多数据时实现分页的最佳方法。注意,“搜索方法”也称为键集寻呼。
打开App,查看更多内容
随时随地看视频慕课网APP