sql-server-2005 - 在 SQL Server 2005 中对非常大的结果集进行分页的有效方法是什么?

标签 sql-server-2005 performance pagination

编辑:我还在等待更多的答案。谢谢!

在 SQL 2000 的日子里,我曾经使用临时表方法,你用新的标识列和主键创建一个临时表,然后选择 A 和 B 之间的标识列。

SQL 2005 我发现了 Row_Number()从那以后我一直在使用它......

但是现在,我发现 Row_Number() 存在严重的性能问题。 .
当您处理不那么庞大的结果集并对标识列进行排序时,它的性能非常好。然而,它的性能很差 当您与 一起工作时大型结果集 像超过 10,000 条记录和 对非标识列进行排序 . Row_Number()如果结果集超过 250,000 条记录,即使按标识列排序,性能也会很差。对我来说,它到了抛出错误的地步,“ 命令超时!

你用什么在 SQL 2005 上对大型结果集进行分页?
在这种情况下,临时表方法仍然更好吗?我不确定这种方法是否using temp table with SET ROWCOUNT会表现得更好......但有人说如果你有多列主键,就会出现给出错误行号的问题。

就我而言,我需要能够按日期类型列对结果集进行排序......对于我的生产网络应用程序。

让我知道您的用途 SQL 2005 中的高性能分页 .而且我还想知道一种创建索引的聪明方法。 我怀疑选择正确的主键和/或索引(集群/非集群)将在这里发挥重要作用。

提前致谢。

附言有谁知道stackoverflow使用什么?

编辑:我的看起来像...

SELECT postID, postTitle, postDate
FROM
   (SELECT postID, postTitle, postDate, 
         ROW_NUMBER() OVER(ORDER BY postDate DESC, postID DESC) as RowNum
    FROM MyTable
   ) as DerivedMyTable
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

postID:Int、Identity(自增)、主键

发布日期:日期时间

编辑:每个人都在使用 Row_Number() 吗?

最佳答案

row_number() 技术应该很快。我已经看到 100,000 行的良好结果。

您是否使用类似于以下内容的 row_number():

SELECT column_list
FROM
   (SELECT column_list
         ROW_NUMBER() OVER(ORDER BY OrderByColumnName) as RowNum
    FROM MyTable m
   ) as DerivedTableName
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

...你有 column_list 的覆盖索引和/或 'OrderByColumnName' 列的索引吗?

关于sql-server-2005 - 在 SQL Server 2005 中对非常大的结果集进行分页的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169596/

相关文章:

c# - 删除前检查引用完整性规则违规

performance - 许多具有相同几何形状和 Material 的网格,我可以更改它们的颜色吗?

java - Java中有没有办法让事件带有变量?里面的例子

templates - 使用 CakePHP 为自定义模板链接创建分页

scala - 在 Scala 中进行结果分页的更好方法

sql-server-2005 - 为什么我不能将 DBNull.Value 插入到 sql server 2005 中的可为 null 的图像字段中?

sql-server - T-SQL 滚动十二个月每天的性能

ruby-on-rails-3 - 按最近的 kaminari 帖子分页

java - 是否可以在 sql server 上使用 jdbc 获取查询计划?

performance - 设计大规模的关系系统