在业务层或数据库层上使用分页对数据进行排序的最佳做法是什么?

时间:2010-11-29 01:37:16

标签: sql sorting paging

这可能是一个经常被问到的问题,但到目前为止我找不到令人信服的答案。

在我的项目中,我需要为大约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条

是否有适用于此的标准最佳做法?提前谢谢

2 个答案:

答案 0 :(得分:3)

将此逻辑保留在数据库层。

如果使用存储过程,则将其扩展为也包括排序列,以便您可以返回正确的集合

答案 1 :(得分:0)

如果这是一个多用户应用程序,除非您获取单个显示页面的结果并提交事务,否则会出现可伸缩性问题。

例如,每次用户导航到下一页时,网站上的分页显示都应执行新查询。另一种方法是将完整的20K结果保留在Web会话上下文中,这将无法很好地扩展。

SQL语言对排序有一点麻烦,因为排序的列名(或列索引)无法参数化。