【发布时间】:2010-09-15 05:42:27
【问题描述】:
编辑: 我仍在等待更多答案。谢谢!
在 SQL 2000 的日子里,我曾经使用临时表方法,您创建一个带有新标识列和主键的临时表,然后选择 A 和 B 之间的标识列。
当 SQL 2005 出现时,我发现了 Row_Number(),从那以后我就一直在使用它...
但现在,我发现Row_Number() 存在严重的性能问题。
当您使用不太庞大的结果集并对标识列进行排序时,它的性能非常好。但是,当您处理大型结果集(如超过 10,000 条记录)并将其按非标识列排序时,性能非常差。如果结果集超过 250,000 条记录,即使您按标识列排序,Row_Number() 的性能也很差。对我来说,它到了抛出错误的地步,“命令超时!”
您在 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 (auto-increment), Primary key
postDate: 日期时间
编辑:每个人都在使用 Row_Number() 吗?
【问题讨论】:
标签: sql-server-2005 performance pagination