大家好我正在使用自定义分页,我正在使用此查询获取数据。
DECLARE @pageIndex INT = 0;
DECLARE @pageSize INT = 10;
WITH foo AS (
SELECT ROW_NUMBER() OVER (ORDER BY test ASC) as rownumber, test, col
FROM TestDB.dbo.test
)
SELECT test, col FROM foo
WHERE rownumber BETWEEN (@pageIndex * @pageSize) + 1 AND (@pageIndex * @pageSize) + @pageSize
它应该按原样运作,但我必须考虑性能,这就是问题
哪种方式更适合SQL Server性能?
在表格中选择整个数据然后在asp.net,php等中进行分页。或者用我上面描述的方法选择数据
我有点困惑,因为我上面描述的方法是选择整个数据并给每一行提供行号,然后选择行数在X和Y之间。
答案 0 :(得分:3)
我认为这个问题没有明显的答案。这实际上取决于以下条件:
如果您有大量数据,我会选择SQL分页,这应该更快,因为数据库引擎已针对此进行了优化(假设您已创建了正确的索引)。 但是,如果您拥有少量数据(就其而言,它将适合ram内存),您可以加载所有数据,并且您将提高性能,因为IO不会成为瓶颈。
一般情况下,我会选择SQL分页,这样可以更容易维护,并在数据集增长时进行优化。无论如何,如果io开始成为瓶颈,根据您的资源,您可以复制数据库,更改硬件等,而无需重写正在运行的应用程序。
总结:它真的取决于:)。
答案 1 :(得分:3)
没有一种适合所有情况的解决方案
如果您的页面不超过几页,那么可能更适合在网页中进行分页。
我们的经验是网页分页对我们有用:我们使用div来显示更多结果,以便呈现所有数据,不会往返于Web或数据库服务器。更实际的是,我们的观点是,超过几页的结果对用户来说是无用的,因此它有上限。因此,我们需要管理有限且合理的数据量,而不会向SQL进行循环跳转。