在我的工作场所,我们无法真正决定实现分页和排序的最佳解决方案。我们有两种不同的解决方案,目前使用第二种。我们这样做是因为这看起来是个好主意,但我们没有任何真正的证据。
第一个解决方案:
客户端将 PageSize、CurrentPage 和 SortingColumn 参数传递给存储过程。根据需求,可以对每个输出参数进行排序。它可能看起来像这样:
得到一些东西
第二种解决方案:
SP 没有实现任何这些,而是我们在查询中指定它。
SELECT [...]
FROM GetSomething(...)
ORDER BY [ID]
OFFSET 100 ROWS
FETCH NEXT 100 ROWS ONLY
这两种解决方案是否真的同样适合实现分页和排序,或者其中一种比另一种更有优势?如果有帮助的话,我们使用 1TB 数据库进行操作,这可能会受益于通常不会考虑的小型性能优化。
S.P.:我没有作为 DBA 访问数据库所需的权限,因此我不能简单地尝试并进行基准测试。实际的 DBA 认为这不值得调查,所以我想我可能只是问 Stackoverflow,以防有确凿的事实:-)
我通常使用第一个选项。我觉得在客户端对数据进行排序的一点额外控制是值得的。我还没有看到任何明显的差异,所以你可以使用其中任何一个。就我而言,如果需要,我可以更改排序,而不必弄乱查询。