EDIT: 我仍在等待更多答案。谢谢!
在 SQL 2000 时代,我曾经使用临时表方法,使用新的标识列和主键创建临时表,然后选择 A 和 B 之间的标识列。
When SQL 2005我来了之后发现了Row_Number()
从那时起我就一直在使用它......
但现在,我发现了一个严重的性能问题Row_Number()
。
当您处理不太大的结果集并对标识列进行排序时,它的性能非常好。然而,它的表现很差当你与大型结果集比如超过 10,000 条记录以及对非同一列进行排序. Row_Number()
如果结果集超过 250,000 条记录,即使按标识列排序,性能也会很差。对我来说,它已经到了抛出错误的地步,“命令超时!"
在 SQL 2005 上使用什么来对大型结果集进行分页?在这种情况下,临时表方法是否更好?我不确定这个方法是否有效将临时表与 SET ROWCOUNT 一起使用 https://web.archive.org/web/20211020131201/https://www.4guysfromrolla.com/webtech/042606-1.shtml会表现得更好......但有人说,如果您有多列主键,则存在给出错误行号的问题。
就我而言,我需要能够针对我的生产 Web 应用程序按日期类型列对结果集进行排序。
让我知道你的用途SQL 2005 中的高性能分页。我还想知道创建索引的聪明方法。我怀疑选择正确的主键和/或索引(聚集/非聚集)将在这里发挥重要作用。
提前致谢。
P.S. 有谁知道 stackoverflow 使用什么?
EDIT:我的看起来像...
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(自增)、主键
发布日期:日期时间
EDIT:每个人都使用 Row_Number() 吗?