编辑: 我仍在等待更多答案。谢谢!
在 SQL 2000 的日子里,我曾经使用临时表方法,您创建一个带有新标识列和主键的临时表,然后选择 A 和 B 之间的标识列。
当SQL 2005出现时,我发现Row_Number()
并且从那时起我就一直在使用它......
但是现在,我发现Row_Number()
. 当您使用不太庞大的结果集并对标识列进行排序时,它的性能非常好。但是,当您处理大型结果集(如超过 10,000 条记录)并在 non-identity column 上对其进行排序时,它的性能非常差。如果结果集超过 250,000 条记录,即使您按标识列进行排序,性能也会很差。对我来说,它到了抛出错误的地步,“命令超时! ”Row_Number()
您使用什么来对 SQL 2005 上的大型结果集进行分页? 在这种情况下临时表方法是否更好?我不确定这种使用带有 SET ROWCOUNT 的临时表的方法是否会表现得更好......但有人说如果你有多列主键,就会出现给出错误行号的问题。
就我而言,我需要能够按日期类型列对结果集进行排序......对于我的生产网络应用程序。
让我知道您在 SQL 2005 中使用什么进行高性能分页。而且我还想知道一种创建索引的聪明方法。我怀疑选择正确的主键和/或索引(集群/非集群)将在这里发挥重要作用。
提前致谢。
PS有谁知道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
发布日期:日期时间
编辑:每个人都在使用 Row_Number() 吗?