首先,我是WCF和SQL Server的新手。我正在开发一个与WCF和SQL Server 2012连接的应用程序。我有一个包含百万条记录的行的表,并且该计数将继续增加。当客户端发送请求时,我将获取30行,然后在用户请求时显示接下来的30行,依此类推。我的要求是在WCF或SQL中进行分页。我有以下问题:
Skip
和Take
运算符来获取所请求的页面。这是正确的方法吗?OFFSET
(或)ROW_NUMBER() OVER
选项?由于我是新手,这些方法就是我所知道的。还有其他方法我不知道吗?
答案 0 :(得分:1)
Skip
之类的实体框架,而Take
将不会在内存中执行这些操作,它会将它们转换为sql查询并在sql中运行它们。OFFSET
,则会比ROW_NUMBER() OVER
提供更好的效果。有一点需要注意,如果您正在进行分页,则必须确保您的排序是确定性的。订购时可能没有联系,如果你允许关系,你可以在你的分页符上有一个权利。让我们说A行和B行是"捆绑"按您的订单:
您从未在上面的示例中显示过行B.解决此问题的最简单方法是始终确保您通过主键(或任何其他可以执行唯一索引的列集)执行订单作为您订购的最后一件事,这可确保您永远不会有任何关系