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

前端之家收集整理的这篇文章主要介绍了sql-server-2005 – 在SQL Server 2005中分析非常大的结果集的有效方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:我还在等待更多答案.谢谢!

sql 2000天,我曾经使用临时表方法,您在其中创建具有新标识列和主键的临时表,然后选择A和B之间的标识列.@H_502_3@

sql 2005出现时,我发现了Row_Number(),从那以后我一直在使用它…@H_502_3@

但现在,我发现Row_Number()存在严重的性能问题.
当您使用不那么巨大的结果集并对标识列进行排序时,它的性能非常好.但是,当您处理超过10,000条记录的大型结果集并将其排序到非标识列时,它的性能非常差.如果结果集超过250,000条记录,则即使按标识列排序,Row_Number()也表现不佳.对我来说,它突然出现错误,“命令超时!”@H_502_3@

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

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

让我知道你在sql 2005中用于高性能分页内容.我也想知道一种创建索引的聪明方法.我怀疑选择正确的主键和/或索引(群集/非群集)将在这里发挥重要作用.@H_502_3@

提前致谢.@H_502_3@

附:有谁知道stackoverflow使用什么?@H_502_3@

编辑:我看起来像……@H_502_3@

SELECT postID,postTitle,postDate
FROM
   (SELECT postID,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(自动增量),主键@H_502_3@

postDate:DateTime@H_502_3@

编辑:每个人都使用Row_Number()?@H_502_3@

解决方法

好吧,对于您的示例查询,如果您在PostDate字段上有索引,则ROW_COUNT应该非常快,有数千行.如果不这样做,服务器需要在PK上执行完整的聚簇索引扫描,实际上加载每个页面,获取PostDate字段,按其排序,确定要为结果集提取的行,然后再次获取这些行.它是一种一遍又一遍地创建临时索引(你可能会在普通中看到一个表/索引假脱机).

难怪你得到超时.@H_502_3@

我的建议:在PostDate DESC上设置一个索引,这是ROW_NUMBER将要经过的 – (ORDER BY PostDate DESC,…)@H_502_3@

至于你所指的那篇文章 – 我过去做了很多分页sql Server 2000的东西而没有ROW_COUNT,文章中使用的方法是最有效的方法.它并不适用于所有情况(您需要唯一或几乎唯一的值).其他一些方法的概述是here.@H_502_3@

.@H_502_3@

猜你在找的MsSQL相关文章