这可能是一个经常被问到的问题,但到目前为止我找不到令人信服的答案。
在我的项目中,我需要为大约20,000多条记录进行分页,这些记录是来自多个表的连接结果,并且需要在不同的场景中进行不同的排序。
目前,我面前有两个选项:
1,使用数据库层ie. where dl.[row_number] between @index*@size+1 and @index*@size+@size
上的存储过程来执行此操作。
这样做的问题是,你必须分别为每个排序编写Store Procs。
2,在Business Logic层上执行此操作,并在结果上方进行分页和排序。 (ie. skip(), take())
但它也不理想,因为你最终可能会检索20,000条记录,但只使用其中的10条
是否有适用于此的标准最佳做法?提前谢谢
答案 0 :(得分:3)
将此逻辑保留在数据库层。
如果使用存储过程,则将其扩展为也包括排序列,以便您可以返回正确的集合
答案 1 :(得分:0)
如果这是一个多用户应用程序,除非您获取单个显示页面的结果并提交事务,否则会出现可伸缩性问题。
例如,每次用户导航到下一页时,网站上的分页显示都应执行新查询。另一种方法是将完整的20K结果保留在Web会话上下文中,这将无法很好地扩展。
SQL语言对排序有一点麻烦,因为排序的列名(或列索引)无法参数化。