繁体   English   中英

如何使用WCF和SQL Server实现行分页?

[英]How to implement paging of rows with WCF and SQL Server?

首先,我是WCF和SQL Server的新手。 我正在开发一个与WCF和SQL Server 2012连接的应用程序。我有一个表,其中的行具有一百万条记录,并且该计数将不断增加。 当客户端发送请求时,如果用户请求,我将获取30行,然后显示接下来的30行,依此类推。 我的要求是在WCF或SQL中进行分页。 我有以下问题:

  1. 我想知道在WCF或SQL Server中应该在哪里实现分页概念? 哪种方法最快?
  2. 如果我在WCF中实现它,我将使用LINQ的Skip and Take运算符来获取请求的页面。 那是正确的方法吗?
  3. 如果使用SQL,哪种方法将获取最快的结果OFFSET (或) ROW_NUMBER() OVER选项?

由于我是新手,所以这些方法才是我所知道的。 还有其他我不知道的方法吗?

  1. 您想在SQL Server上进行分页,如果您执行的每个查询都不会返回必须加载到内存中的一百万行,那么您将立即丢弃其中的30条记录。 效率很低。
  2. 这取决于你的意思。 如果您正在使用诸如“实体框架”之类的“ SkipTake则不会在内存中执行这些操作,而是会将其转换为sql查询并在sql中运行。
  3. 如果您可以使用,则OFFSET将为您提供比ROW_NUMBER() OVER更好的性能。

需要注意的一件事是,如果要进行分页,则必须确保顺序是确定的。 订购中不能有领带,如果允许领带,则可以在分页符上保留一个权利。 假设通过您的订单“绑定”了A行和B行:

  • 您对第1页运行查询,并且行A被视为在行B和行A显示为该页面的最后一项之前
  • 您对第2页运行查询,并且认为行B在行A和行A显示为第二页的第一项之前。

在上面的示例中,您从未显示B行。 解决此问题的最简单方法是始终确保您在最后一件事上对主键(或您可以在其上进行唯一索引的任何其他列集)进行排序,以确保您之间没有任何联系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM