2010-06-24 37 views
4

我对使用ASP.NET和SQL Server分页大数据集(100,000条记录)的最佳实践感兴趣。分页大数据集 - SQL Server(最佳实践)

我已经使用SQL服务器来执行分页之前,虽然这似乎是一个理想的解决方案,但问题出现在这个解决方案的动态排序中(order by子句的case语句确定ASC的列和case语句/ DESC命令)。我不是这样的粉丝,因为它不仅将应用程序与SQL细节绑定在一起,而且是可维护性的噩梦。

打开其他解决方案...

谢谢大家。

+0

你是什么意思,它将应用程序绑定到SQL细节? – 2010-06-24 14:55:15

+0

您现在有一个跨越数据库和应用程序的索引方案,例如与您的存储过程中的case语句值匹配的.NET枚举,或者可能是所请求列的字符串表示形式。 – cweston 2010-06-24 14:59:41

回答

0

如果使用Order by技术,每次浏览时都会导致服务器上的负载相同,因为您运行查询,然后过滤数据。

当我有奢侈的非连接池环境时,我创建并保持连接打开,直到分页完成。在连接上创建一个#Temp表,只需要返回的行的ID,并将IDENTITY字段添加到此行集。然后使用此表进行分页以获得最快的回报。

如果您仅限于连接池环境,则一旦连接关闭,#Temp表就会丢失。在这种情况下,您将不得不缓存服务器上的ID列表 - 永远不要将它们发送到客户端以进行缓存。

0

我想给Raj的答案增加一个快速建议。如果使用##表格格式创建临时表格,它将会存活。但是,它也将在所有连接中共享。

如果您在将要排序的列上创建索引,则此方法的成本要低得多。

埃里克

1

以我的经验,100 000多个记录是看着他们的用户太多记录。上次我做了这个,我提供了过滤器。因此,用户可以使用它们并查看已过滤(更少数量)的记录并对它们进行排序,因此,分页和排序变得更快(比在整个100000条记录上进行分页/排序)要快得多。如果用户没有使用过滤器,我会显示一个“警告”,表示会返回大量记录,并且会有延迟。在Erick建议的列上添加一个索引也肯定会有所帮助。