在存储过程中实现排序和分页有缺点吗?

问题描述 投票:0回答:1

在我的工作场所,我们无法真正决定实现分页和排序的最佳解决方案。我们有两种不同的解决方案,目前使用第二种。我们这样做是因为这看起来是个好主意,但我们没有任何真正的证据。

第一个解决方案:

客户端将 PageSize、CurrentPage 和 SortingColumn 参数传递给存储过程。根据需求,可以对每个输出参数进行排序。它可能看起来像这样:

得到一些东西

  1. 当前页(整数)
  2. 页面大小(整数)
  3. 排序列 (VARCHAR)
  4. 排序方向(BIT,0:升序,1:降序)

第二种解决方案:

SP 没有实现任何这些,而是我们在查询中指定它。

SELECT [...]
FROM GetSomething(...)
ORDER BY [ID]
OFFSET 100 ROWS
FETCH NEXT 100 ROWS ONLY

这两种解决方案是否真的同样适合实现分页和排序,或者其中一种比另一种更有优势?如果有帮助的话,我们使用 1TB 数据库进行操作,这可能会受益于通常不会考虑的小型性能优化。

S.P.:我没有作为 DBA 访问数据库所需的权限,因此我不能简单地尝试并进行基准测试。实际的 DBA 认为这不值得调查,所以我想我可能只是问 Stackoverflow,以防有确凿的事实:-)

sorting stored-procedures pagination sql-server-2012
1个回答
1
投票

我通常使用第一个选项。我觉得在客户端对数据进行排序的一点额外控制是值得的。我还没有看到任何明显的差异,所以你可以使用其中任何一个。就我而言,如果需要,我可以更改排序,而不必弄乱查询。

© www.soinside.com 2019 - 2024. All rights reserved.