2011-08-14 34 views
0

嗨,大家好我正在使用自定义分页,我得到的数据与此查询。选择第n个数字表现?

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之间。

回答

3

我认为没有明显的答案题。这取决于以下条件:

  1. 您分页的数据量有多大。
  2. 您需要多长时间才能访问这些数据(即一次有多少客户端访问数据)。

如果你有大量的数据,我会去SQL分页,这应该更快,因为数据库引擎为此进行了优化(假设你有正确的索引创建)。 但是,如果您的数据量很小(可以装入内存),您可以加载所有数据,并且可以提高性能,因为IO不会成为瓶颈。

一般来说,我会去SQL分页,这是更容易维护和优化,如果你的数据集增长。无论如何,如果io开始成为瓶颈,根据您的资源,您可以复制数据库,更改硬件等,而无需重写正在运行的应用程序。

总结:它确实取决于:)。

3

有没有一种解决办法适合所有的情况下

如果您有不超过几页多,那么它可能在网页中更好的页面。

我们的经验是,网页分页为我们工作:我们使用div来显示更多的结果,所以所有的数据都被渲染,没有到Web或数据库服务器的往返。更实际的是,我们的观点是,超过几页的结果对用户来说是无用的,因此它被封顶了。所以我们有一个有限且合理的数据量来管理,而不需要向SQL跳转。