Sql server 针对SQL Server在nHibernate中分页:是否需要排序顺序?
我们发现,在我们的.NET4.51/nHibernate/sql2008应用程序中,当我们执行一个大型查询时,我们会获得所有数据,但当我们针对某些大型结果集进行分页时,会丢失行 (在我们的测试中,当我们对1000行或更多行的结果集进行每页200页的测试时,我们看到了问题。) 我们尝试了使用SQL2000和SQL2005 nHibernate方言的应用程序,没有发现行为上的差异。(在SQL2005中,查询语法确实演变为使用较新的结构,但在使用SQL2005方言时,相同的数据丢失。) nHibernate生成SQL查询。 我们正在做寻呼。 如果按100分页,nHibernate生成后续SQL查询的方式是:Sql server 针对SQL Server在nHibernate中分页:是否需要排序顺序?,sql-server,nhibernate,Sql Server,Nhibernate,我们发现,在我们的.NET4.51/nHibernate/sql2008应用程序中,当我们执行一个大型查询时,我们会获得所有数据,但当我们针对某些大型结果集进行分页时,会丢失行 (在我们的测试中,当我们对1000行或更多行的结果集进行每页200页的测试时,我们看到了问题。) 我们尝试了使用SQL2000和SQL2005 nHibernate方言的应用程序,没有发现行为上的差异。(在SQL2005中,查询语法确实演变为使用较新的结构,但在使用SQL2005方言时,相同的数据丢失。) nHibern
- 前100名//给我们第一个100名
- TOP 200//为我们提供了该街区的第二个100
- 等
选择前33名
...
从…起
salesOrder此u2;左外部联接[Item]Item2 2;在此2;.ItemId=Item2 2;.ItemId上
其中,这个u.AccountId=@p0
而这个uu.ModifiedAt>@p1
这个函数修改了1000行并被分页
Order By子句(nHibernate级别的排序)是解决方案,还是我们需要采取其他路径?答案是:Order By
是必需的
注意,在nHibernate查询中使用排序顺序(在索引字段上获得最佳结果!)。@RadimKöhler我们看到分页工作,几乎在所有情况下。。。除非它没有。该问题是由大型数据库上的大型数据集引起的。这里的问题是:如何使它100%可靠?如果您正在分页,您当然应该对结果进行排序。否则,SQL server的行为是未定义的——它可以以任何顺序返回行。@RadimKöhler OPrevised@AndrewWhitaker操作revised@Jonesome:我很确定答案是“是”,如果添加一个OrderBy
子句,您将看到所有数据。
SELECT top 33
... <field list>
FROM
salesOrder this_ left outer join [Item] Item2_ on this_.ItemId=Item2_.ItemId
WHERE this_.AccountId = @p0
and this_.ModifiedAt > @p1
and this_.ModifiedAt <= @p2