分页大型数据集 - SQL Server(最佳实践)

4

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

我之前使用过SQL Server来进行分页,虽然这似乎是一个理想的解决方案,但是在动态排序时会出现问题(需要使用case语句来确定列和ASC/DESC顺序)。我不喜欢这种方法,因为它不仅将应用程序与SQL细节绑定在一起,而且难以维护。

欢迎提供其他解决方案...

谢谢大家。


它绑定应用程序到SQL细节是什么意思? - Tom H
现在您拥有一个跨越数据库和应用程序的索引方案,例如.NET枚举与存储过程中的case语句值匹配,或者可能是所请求列的字符串表示形式。 - cweston
3个回答

1
根据我的经验,对于用户来说,超过100,000条记录太多了。上次我做这个的时候,我提供了筛选器。这样用户就可以使用它们并查看已筛选(数量较少的)记录并对其进行排序,因此分页和排序变得更快(而不是在整个100,000+记录上进行分页/排序)。如果用户没有使用筛选器,我会显示一个“警告”,说明将返回大量记录并且会有延迟。按照Erick的建议,在被排序的列上添加索引也肯定会有所帮助。

0

如果您使用Order by技术,每次翻页时都会对服务器造成相同的负载,因为您正在运行查询,然后过滤数据。

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

如果您受限于连接池环境,则#Temp表会在连接关闭时丢失。在这种情况下,您必须在服务器上缓存Id列表-永远不要将它们发送到客户端进行缓存。


0

我想对Raj的回答提出一个快速建议。如果您使用格式为##table的临时表,它将会被保留。但是,它也将在所有连接之间共享。

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

Erick


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接